Usuário com melhor resposta
DataGridView "Criar filtro para consulta e depois ...."

Pergunta
-
Alô pessoal... blz? essa é o meu primeiro post aki, então desculpem minha falha se houver... sou novo na area de desenvolvimento
Bom é o seguinte, criei um aplicativo com banco de dados, está funcionando quase tudo blz, só que tem um problema,
quero que os registros corram (setando o teclado/mouse) tanto pelo dgv quanto pela textbox depois de clicado (já na tela de incluir/alterar/excluir)
Blz usando o binding source position isso é possível, mas se eu usar o filtro para consultar, no doubleclick o resultado lançado no textbox é diferente...
o registro que aparece no DGV não é igual ao do bs, já tentei quase tudo mas não acho um jeito de consertar isso.
Ex.: (No Dgv aparece na 3ª linha "Maria Helena etc..." no text aparece "Joaquim Alves..." pq esse foi o 3º cadastro do banco.. esse tá sendo o problema.
Fiz uma tentativa usando o event CellContentDoubleClick, (a referência usada foi toda pelo dgv) ai corrigiu o problema da diferença dos registros,
mas agora na tela de alteração já não consigo 'setar' os registros. Por favor quem puder me ajudar agradeço, sei que é 'cabacice', mas por isso tô insistindo pra aprender. desculpa ai se ta longa d+++, tentei ser o + detalhista possível.
Respostas
-
Neoshao,
Pelo que vi, você está preenchendo os valores dos campos manualmente.
O ideal seria você bindar os controles ao BindingSource, assim a .NET Framework irá "sincronizar" os controles para você com o bindingsource automaticamente. Assim o seu grid e os seus controles sempre estariam sincronizados.
Veja este artigo:
http://www.macoratti.net/09/04/c_dtb1.htm
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Neoshao domingo, 5 de junho de 2011 10:30
Todas as Respostas
-
Neoshao,
Você está bindando os seus controles no mesmo bindingsource do seu grid? Acho que o problema pode ser este.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
-
Neoshao,
Se possível poste o seu código para podermos analisar melhor o seu problema.
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono) -
Segue ai o bloco de código no qual eu consigo na filtragem do textbox consultar o registro correto e lança-lo em outro campo, mas dessa forma não estou conseguindo correr pelos registros no segundo campo aonde foi carregado os valores...
private void CarregarDatagrid()
{
DtCliente.Clear();
OleDbDataAdapter DaCliente = new OleDbDataAdapter("Select * From Clientes", Conn);
DaCliente.Fill(DtCliente);
if (Conn.State == ConnectionState.Open) Conn.Close();
BsCliente.DataSource = DtCliente;
DgvCliente.DataSource = BsCliente;
DaCliente.Dispose();}
_____________________________________________________________________________________________________________________
private void Contador() // chamada para reconhecer a 'Tab' atual e mostrar a contagem correta de registros...
{
if (TbAbas.SelectedIndex == 0 | TbAbas.SelectedIndex == 2)
{
LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
}
else
{
LblNavegacao.Text = (BsProduto.Position + 1) + " de " + BsProduto.Count;
}
}_____________________________________________________________________________________________________________________
private void DgvCliente_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
HabilitarGrupos(false, true, true, false);
TbAbas.SelectedIndex = 2; TxtPesquisar.Text = string.Empty;
if (DtCliente.Rows.Count != 0)
{
LblNumCod.Text = DgvCliente.Rows[e.RowIndex].Cells[0].Value.ToString();
TxtNome.Text = DgvCliente.Rows[e.RowIndex].Cells[1].Value.ToString();
TxtEndereco.Text = DgvCliente.Rows[e.RowIndex].Cells[4].Value.ToString();
TxtComplemento.Text = DgvCliente.Rows[e.RowIndex].Cells[5].Value.ToString();
TxtBairro.Text = DgvCliente.Rows[e.RowIndex].Cells[2].Value.ToString();
TxtCidade.Text = DgvCliente.Rows[e.RowIndex].Cells[3].Value.ToString();
MskTxtTelRes.Text = DgvCliente.Rows[e.RowIndex].Cells[6].Value.ToString();
MskTxtTelCel.Text = DgvCliente.Rows[e.RowIndex].Cells[7].Value.ToString();
TxtEmail.Text = DgvCliente.Rows[e.RowIndex].Cells[8].Value.ToString();
}
else { MessageBox.Show( "Não existe registros no Banco de dados!"); }
}private void BtnProximo_Click(object sender, EventArgs e)
{
BsCliente.MoveFirst(); BsProduto.MoveFirst(); Contador();
}_____________________________________________________________________________________________________________________
2º MODO...
Essa foi a primeira forma que tentei, funciona muito bem, consigo correr os registros tanto pelo DGV quanto pelos textbox já carregados,
mostrando a contagem e a posição correta dos mesmos. Só que quando faço um filtro nos registros e depois quero carregar um deles
no campo seguinte, ele pega o index do registro como se fosse a tabela completa. (ex.: filtro mostra 03 registros com [MARIA], mas
no load dos textbox ele mostra [ARNALDO])...
private void PreencherCampos()
{
if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 2)
{
if (DtCliente.Rows.Count != 0)
{
TxtCodCliente.Text = DtCliente.Rows[BsCliente.Position][0].ToString();
TxtNome.Text = DtCliente.Rows[BsCliente.Position][1].ToString();
TxtBairro.Text = DtCliente.Rows[BsCliente.Position][2].ToString();
TxtCidade.Text = DtCliente.Rows[BsCliente.Position][3].ToString();
TxtEndereco.Text = DtCliente.Rows[BsCliente.Position][4].ToString();
TxtComplemento.Text = DtCliente.Rows[BsCliente.Position][5].ToString();
MaskTxtTelRes.Text = DtCliente.Rows[BsCliente.Position][6].ToString();
MaskTxtTelCel.Text = DtCliente.Rows[BsCliente.Position][7].ToString();
TxtEmail.Text = DtCliente.Rows[BsCliente.Position][8].ToString();
LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
}
else
{
return;
}_____________________________________________________________________________________________________________________
private void ReconhecerAbas()
{
//CarregarDados();
if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 1)
{
HabilitarGrupos(false, false, true, true);
LblNavegacao.Text = (BsProduto.Position + 1) + " de " + BsProduto.Count;
LblNavegacao.Text = (BsCliente.Position + 1) + " de " + BsCliente.Count;
this.BtnPrimeiro.Image = global::ConexaoBanco.Properties.Resources.upfirst_24x24;
this.BtnAnterior.Image = global::ConexaoBanco.Properties.Resources.upprevious_24x24;
this.BtnProximo.Image = global::ConexaoBanco.Properties.Resources.downnext_24x24;
this.BtnUltimo.Image = global::ConexaoBanco.Properties.Resources.downlast_24x24;
}_____________________________________________________________________________________________________________________
private void Dgv_DoubleClick(object sender, EventArgs e)
{
//BsCliente.Position = DgvCliente.CurrentRow.Index;
PreencherCampos();
TabCtrl.SelectedIndex = 2;
LblNavegacao.Text = (DgvCliente.CurrentRow.Index + 1).ToString() + " de " + BsCliente.Count;
}_____________________________________________________________________________________________________________________
private void BtnProximo_Click(object sender, EventArgs e)
{
if (TabCtrl.SelectedIndex == 0 | TabCtrl.SelectedIndex == 2) BsCliente.MoveNext();
if (TabCtrl.SelectedIndex == 1 | TabCtrl.SelectedIndex == 3) BsProduto.MoveNext();
PreencherCampos();
}Bom se faltar agluma coisa é só falar, espero que possa me dar uma força ai, pois sei que deve tá na minha cara a resposta, mas ainda não conheço todas
as funções. Desde já agradeço a atenção!!! VLW
-
Neoshao,
Pelo que vi, você está preenchendo os valores dos campos manualmente.
O ideal seria você bindar os controles ao BindingSource, assim a .NET Framework irá "sincronizar" os controles para você com o bindingsource automaticamente. Assim o seu grid e os seus controles sempre estariam sincronizados.
Veja este artigo:
http://www.macoratti.net/09/04/c_dtb1.htm
at.,
Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)- Marcado como Resposta Neoshao domingo, 5 de junho de 2011 10:30
-