TextBox, Combobox, DataGrid, 2 Tabelas - Como implementar usando DataSet/DataTables?

Respondido TextBox, Combobox, DataGrid, 2 Tabelas - Como implementar usando DataSet/DataTables?

  • quinta-feira, 13 de julho de 2006 05:54
     
     


    Olá,

    Estou com dúvidas na situação abaixo.

    Tabelas: Lote e Produtos

    Tabela Lote

    Empresa____Lote____Contagem_____Produto
    A__________0001_______1_________codproduto1
    A__________0001_______2_________codproduto1
    A__________0001_______1_________codproduto2
    A__________0002_______1_________codproduto3
    ...

    Tabela Produtos

    Codigo_______Descricao____Unidade ...
    codproduto1___produto1_____cx
    codproduto2___produto2_____cx
    codproduto3___produto3_____pc
    ...

    As tabelas são importadas de outro sistema e tenho que trabalhar com elas desta forma. Não posso modificar a estrutura do banco.

    Combo: populado com SELECT DISTINCT lote FROM Lote

    DataGrid: populado com os produtos que constam na tabela Lote filtrados por lote (através do combobox) e únicos. Algo de tipo equivalente a SELECT DISTINCT produto FROM Lote WHERE Lote = '0001' (obtido do combo) e complementado com os detalhes que virão da tabela Produtos (join?).

    TextBox: recebe o campo descrição de um produto selecionado no DataGrid

    * O que precisa acontecer:

    1) popular o combo com o campo lote da tabela lote, dados sem repetição.

    2) popular o grid com os produtos da tabela lote, sem repetição, onde lote = conteúdo do combo. Dados complementares do produto virão da tabela Produtos.

    3) ao selecionar um outro lote no combo, atualizar o grid

    4) ao selecionar um registro no grid, a descrição correspondente ao produto deverá aparecer no TextBox

    Já pesquisei bastante aqui e em outros sites e fóruns, aprendi e corrigi muitas coisas, penso que estou bem perto da solução e agora busco sugestões com os mais experientes.

    Já vi que existe um método Select de DataTable mas não tem como usar distinct. E vi que existem algumas rotinas para realizar o distinct via código. Mas farei direto no banco mesmo.

    Aprendi o mecanismo para criar e popular DataSet com DataTables através de SqlCeAdapter*, método fill, etc.

    * Estou usando Sql Server Mobile Edition (para Compact Framework) e Windows forms. Mas muitos processos são semelhantes ao Sql Server

    Aprendi o básico para formatar as colunas do grid usando TableStyle (já fiz o que precisava).

    Não sei fazer o equivalente a um select em 2 tabelas passando como parâmetro o conteúdo do combo, através de DataSet/DataTables. Mas sei que precisarei usar as propriedades ValueMember e SelectedValue do combo...

    Não sei como atualizar o grid após mudar o valor da combo

    Ainda não sei quando e como usar DataBinding, se é melhor, mais fácil, equivalente ou se não tem nada a ver com este caso...

    Agradeço a todos desde já!

    Renato.

Todas as Respostas

  • quinta-feira, 13 de julho de 2006 12:17
    Moderador
     
     Respondido

    Renato,

    Você poderia preencher um DataSet com os dados que você precisa para mostrar na tabela e estabelecer relacionamento entre eles. Então, vinculando os controles corretamente você conseguiria fazer o quer com poucas linhas de código. Eu demonstro isso no meu blog, com um exemplo, dê uma conferida:

    http://thespoke.net/blogs/fbcjunior/archive/2005/09/09/DataBindingEDataRelations.aspx

    Abraços,
    Francisco
    Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

  • sexta-feira, 21 de julho de 2006 00:50
     
     

    Francisco,

    Obrigado. Acabei conseguindo, não sei se da melhor maneira, mas está funcionando. De qualquer forma li seu blog e já aprendi coisas novas. Como você deve saber, no compact framework os recursos são limitados. Estou usando Visual Studio 2003 .NET e o DataGrid não possui a propriedade DataMember, aí acabou complicando.

    Li algumas coisas sobre CurrencyManager e BindingContext mas ainda não entendi bem os conceitos.

    Estou tentando marcar sua resposta aqui no fórum mas está dando erro e informando que foi logado... Tentarei novamente em outra oportunidade.

    Agora estou com dúvidas/problemas com o método LoadDataRow do DataTable, mas vou postar em outro tópico.

    Abraço,

    Renato.

  • quinta-feira, 12 de abril de 2012 15:51
     
     

    faz assim no evento do combobox (antes vc deve colocar o mesmo codigo no form.load)

    SubComboBox1_SelectedIndexChanged(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) HandlesComboBox1.SelectedIndexChanged

    dim conexao AsNewOleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\comissao_jack\comissao.accdb")

            conexao.Open()

           

    Dimda AsNewOleDbDataAdapter("SELECT DISTINCT [Title Name], [Sales Speciality Code], [Metric Order], [Metric Name], [Metric Weight], [MC Long Name], [Business Area] FROM PLAYBOOK_2 WHERE [Title Name]="& "'"& ComboBox1.Text & "'", conexao)

           

    Dimdt AsNewDataTable


            da.Fill(dt)

            DataGridView1.DataSource = dt.DefaultView

       

    EndSub