none
BindingSource RRS feed

  • Pergunta

  • Olá pessoal!
    Tentarei ser o mais objetivo possível.
    Pra fins de estudo eu fiz esse código em um button:

    BindingSource bs = new BindingSource();

           

    private void button1_Click(object sender, EventArgs e)

    {

    string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dados\DepQuim.mdb";

    string strCMD = "SELECT * From DepQuimico";

    OleDbConnection Conn = new OleDbConnection(strConn);

    OleDbCommand CMD = Conn.CreateCommand();

    CMD.CommandText = strCMD;

    OleDbDataAdapter adpter = new OleDbDataAdapter(CMD);

             

    DataTable dt = new DataTable();

              

    adpter.Fill(dt);

    bs.DataSource = dt;

    Binding bsr = textBox1.DataBindings.Add("Text", bs, "Nome", true);

    bsr.NullValue = "No Manager";

    }

    E funciona muito bem. Tudo legal. O problema é que se eu clicar uma segunda vez nesse botão vai dar um erro dizendo que o bind está duplicado. 
    eu pensei que o código:


    bsr.NullValue = "No Manager";


    deixaria o bind nulo mas isso não acontece. 
    Na verdade não entendo muito de bindingsouce e não sei se isso é normal e se é preciso resolver isso. 
    Como devo proceder?
    Deixar assim mesmo podendo dar esse problema de novo.

    Um abraço espero a cooperação de vcs.

    Eujobi                       

    terça-feira, 14 de julho de 2009 19:40

Respostas

  • "Eujobi,

    Qual o objectivo da acção button1_Click"?

    Pelo que compreendi, parece-me que estas a abordar mal o problema, por comaças por fazer uma query à base de dados que te  pode devolver mais do que um resultado, e depois fazes o binding desse resultado numa textbox, logo não vês toda a informação que a base de dados devolve na textbox.

    Depois, quando fazes "textBox1.DataBindings.Add", estás a adicionar uma fonte de informação à textbox, logo quando voltas a carregar no "button1" dá-te erro, porque a textbox já tem uma fonte de informação associada e o controlo não pode ser alimentado por mais que uma fonte de informção, porque não saberia qual das fontes de informação utilizar.

    Se utilizares o seguinte código qu eu alterei, ficas com o problema de compilação corrigido, mas podes não ter a solução para o teu objectivo final da função:

    private void button1_Click(object sender, EventArgs e)
    
    {
    
    string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dados\DepQuim.mdb";
    
    string strCMD = "SELECT * From DepQuimico";
    
    OleDbConnection Conn = new OleDbConnection(strConn);
    
    OleDbCommand CMD = Conn.CreateCommand();
    
    CMD.CommandText = strCMD;
    
    OleDbDataAdapter adpter = new OleDbDataAdapter(CMD);
    
              
    
    DataTable dt = new DataTable();
    
               
    
    adpter.Fill(dt);
    
    bs.DataSource = dt;
    
    Binding bsr = textBox1.DataBindings.Add("Text", bs, "Nome", true);
    
    bsr.NullValue = "No Manager"; 
    
    //aqui apenas limpa a fonte de informação que o controlo textBox1 está a utilizar, quando carregares no botão outra vez, 
    //ele vai voltar a adiocionar uma fonte de informação textBox1.DataBindings.Clear(); }


    Bruno Pires www.blastersystems.com www.blastersystems.com/blog
    • Sugerido como Resposta Bruno AC Pires quarta-feira, 15 de julho de 2009 14:04
    • Marcado como Resposta Eujobi sexta-feira, 17 de julho de 2009 12:03
    quarta-feira, 15 de julho de 2009 13:57

Todas as Respostas

  • "Eujobi,

    Qual o objectivo da acção button1_Click"?

    Pelo que compreendi, parece-me que estas a abordar mal o problema, por comaças por fazer uma query à base de dados que te  pode devolver mais do que um resultado, e depois fazes o binding desse resultado numa textbox, logo não vês toda a informação que a base de dados devolve na textbox.

    Depois, quando fazes "textBox1.DataBindings.Add", estás a adicionar uma fonte de informação à textbox, logo quando voltas a carregar no "button1" dá-te erro, porque a textbox já tem uma fonte de informação associada e o controlo não pode ser alimentado por mais que uma fonte de informção, porque não saberia qual das fontes de informação utilizar.

    Se utilizares o seguinte código qu eu alterei, ficas com o problema de compilação corrigido, mas podes não ter a solução para o teu objectivo final da função:

    private void button1_Click(object sender, EventArgs e)
    
    {
    
    string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dados\DepQuim.mdb";
    
    string strCMD = "SELECT * From DepQuimico";
    
    OleDbConnection Conn = new OleDbConnection(strConn);
    
    OleDbCommand CMD = Conn.CreateCommand();
    
    CMD.CommandText = strCMD;
    
    OleDbDataAdapter adpter = new OleDbDataAdapter(CMD);
    
              
    
    DataTable dt = new DataTable();
    
               
    
    adpter.Fill(dt);
    
    bs.DataSource = dt;
    
    Binding bsr = textBox1.DataBindings.Add("Text", bs, "Nome", true);
    
    bsr.NullValue = "No Manager"; 
    
    //aqui apenas limpa a fonte de informação que o controlo textBox1 está a utilizar, quando carregares no botão outra vez, 
    //ele vai voltar a adiocionar uma fonte de informação textBox1.DataBindings.Clear(); }


    Bruno Pires www.blastersystems.com www.blastersystems.com/blog
    • Sugerido como Resposta Bruno AC Pires quarta-feira, 15 de julho de 2009 14:04
    • Marcado como Resposta Eujobi sexta-feira, 17 de julho de 2009 12:03
    quarta-feira, 15 de julho de 2009 13:57
  • Olá,

    Complementando - Para aprender mais sobre o BindingSource, veja:

    http://www.macoratti.net/vbn_dgv2.htm
    http://msdn.microsoft.com/pt-br/library/system.windows.forms.bindingsource.aspx

    Abraço,
    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    quinta-feira, 16 de julho de 2009 03:28
  • Olá Bruno Obrigado pela resposta!
    O meu objetivo do button era apenas selecionar com textbox um dado de uma específica tabela. É que estou aprendendo e eu fazia isso usando o datagridview, ou o dataset ou ainda com o datarow. Porem dava muiutos problemas. Sem falar que com o bindingsource é muito mais fácil mover ás lihas com os métodos moveLast por exemplo.

    "O que eu não consegui ainda é fazer componentização do bindingSource. Criei uma classe pro bindingSource pra fazer a componentização e ele funcionou, selecionou os dados de determinada tabela. porem os métodos, moveNext, moveLAst, movePrevious e MoveFirst não funcionáram. Pra funcionar esses métodos eu tive que declarar tudo no codigo do próprio form. se não não dava Certo. MAs você já deu a solução de um problema. 

    Aproveitando o ensejo e como não sei as potencialidade do bindingsource, sei que ele pode filtrar com o filter e ordenar com o sort os dados. MAs seraá que dá pra fazer update, delete e include com o bindingSource? 

    Mais uma vez obrigado pela força! Um abraço!!

    Disse Jesus: Eu sou o Caminho e a Verdade e a Vida; ninguém vem ao Pai senão por Mim. jo 14:6
    ENTREGUE SUA VIDA A JESUS E O DEIXE SALVÁ-LA        
    quinta-feira, 16 de julho de 2009 17:09
  • Eujobi,


    Queres fazer alterações na base de dados com bindingSource?



    Cumprimentos
    Bruno Pires - www.blastersystems.com/blog
    sexta-feira, 17 de julho de 2009 11:20
  • OLÁ!

    não, só perguntei se é possível isso. 

    Um abraço
    Eujobi   


    http://blogbiff.blogspot.com
    sexta-feira, 17 de julho de 2009 12:07
  • Valeu Borges pela ajuda!



    um abraço!


    Disse Jesus: Eu sou o Caminho e a Verdade e a Vida; ninguém vem ao Pai senão por Mim. jo 14:6
    ENTREGUE SUA VIDA A JESUS E O DEIXE SALVÁ-LA        


    http://blogbiff.blogspot.com
    sexta-feira, 17 de julho de 2009 12:27
  • Eujobi,

    Vou deixar-te aqui alguma informção que te pode ser útil para facilmente e através de código C# acederes e manipulares uma base de dados:


    http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

    http://msdn.microsoft.com/en-us/library/bb425822.aspx

    http://imasters.uol.com.br/artigo/7156/bancodedados/introducao_linq_to_sql/


    Penso que se leres estes artigos com atenção e executares alguns exemplos de teste, vais conseguir manipula dados de uma forma muito fácil.



    Cumprimentos
    Bruno Pires - www.blastersystems.com/blog
    sexta-feira, 17 de julho de 2009 13:13