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:17Moderador
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- Marcado como Resposta Heloisa PiresModerator terça-feira, 17 de abril de 2012 17:35
-
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

