Sofrendo com Comboboxes
18/01/2010
0
Tenho 2 combobox, que são preenchidas com os dados de duas tabelas, que estão vinculadas pelo ID-CLIENTES, ao iniciar o form da seguinte maneira:
public frmLocacaoEquip() { InitializeComponent(); cbxClientes.DataSource = preencheClientes().Tables[0]; cbxClientes.DisplayMember = "nome_clientes"; cbxClientes.ValueMember = "id_clientes"; cbxObras.DataSource = preencheObras().Tables[0]; cbxObras.DisplayMember = "NOME_OBRAS"; cbxObras.ValueMember = "id_obras"; } private DataSet preencheClientes() { DataSet ds = new DataSet(); conFB = new ConexaoFB(strConexao); conFB.iniciaDataAdpter("select ID_CLIENTES, NOME_CLIENTES from CLIENTES order by NOME_CLIENTES"); conFB.FbDA.Fill(ds, "CLIENTES"); conFB.fecharConexao(); return ds; } private DataSet preencheObras() { DataSet ds = new DataSet(); conFB = new ConexaoFB(strConexao); conFB.iniciaDataAdpter("SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS order by NOME_OBRAS"); conFB.FbDA.Fill(ds, "OBRAS"); conFB.fecharConexao(); return ds; } Estou tentando a bastante tempo fazer com que ao selecionar um cliente na primeira combobox a segunda seja carregada com todas as obras daquele cliente, já fiz em visual basic no século passado, mas na moderna C# ta difícil.
Minha última tentativa também não resultou em nada usei este código no SelectedIndexChanged:
private void cbxClientes_SelectedIndexChanged(object sender, EventArgs e) { string strqry = string.Format(@"SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS WHERE ID_CLIENTES = ", cbxClientes.Text); DataTable dt = new DataTable(); conFB = new ConexaoFB(strConexao); conFB.iniciaDataAdpter(strqry); conFB.FbDA.Fill(dt); cbxClientes.Items.Clear(); foreach (DataRow dr in dt.Rows) { cbxObras.Items.Add(dr[0].ToString()); } } Se alguem puder me dar uma luz, eu fico muito agradecido.
Abraços
Celso Souza
Posts
19/01/2010
Netasper
19/01/2010
Celso Souza
20/01/2010
Alfran Junior
20/01/2010
Celso Souza
21/01/2010
Jardel Sobrinho
Acho que o seu problema está nessa linha:
string strqry = string.Format(@"SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS WHERE ID_CLIENTES = ", cbxClientes.Text);
Se você usar a propriedade Text ele vai te mostrar o nome do cliente, se você a propriedade SelectedValue ele vai mostrar o codigo do Cliente, pois você configou a propriedade ValueMember como o campo id_clientes.O sql gerado está errado. Depois do campo Where você especifica o campo de consulta, no seu caso o campo id_clientes. Se esse campo for numerico o valor passado na consulta não precisa de aspas simples, mas se for de texto tem que haver aspas entre o valor passado. Na pratica fica assim.Se o id_clientes for um campo Numerico:string strqry = "SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS WHERE ID_CLIENTES = " + cbxClientes.Text;
Se o id_clientes for um campo de Texto:
string strqry = "SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS WHERE ID_CLIENTES = '" + cbxClientes.Text + "'";Note as aspas simples entre ficaram no valor passado ao id_clientes.Espero ter ajudado.
22/01/2010
Celso Souza
An exception of type 'FirebirdSql.Data.FirebirdClient.FbException' occurred in FirebirdSql.Data.FirebirdClient.dll but was not handled in user code Additional information: Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 84
.
22/01/2010
Jardel Sobrinho
Eu te passei a propriedade do componente errado, eu utilizei a propriedade Text do cbxClientes, mas a propriedade correta é a SelectedValue. Então a linha ficara assim:
string strqry = "SELECT ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS WHERE ID_CLIENTES = " + cbxClientes.SelectedValue;
22/01/2010
Celso Souza
string strqry = string.Format(@"select ID_OBRAS, ID_CLIENTES, NOME_OBRAS from OBRAS where ID_CLIENTES = ", cbxClientes.SelectedValue); Mas quando abro o form em modo de depuração da o erro, se inicio pelo executável não dá o erro, estou preocupado de no futuro dar um erro depois que entregar a aplicação, entendeu?
26/01/2010
Netasper
Caso ainda de erro, crie um SqlParameter, no caso não seja Sql, pis esta usando outro banco.
26/01/2010
Celso Souza
"An exception of type 'FirebirdSql.Data.FirebirdClient.FbException' occurred in FirebirdSql.Data.FirebirdClient.dll but was not handled in user code Additional information: conversion error from string "System.Data.DataRowView" "
28/01/2010
Netasper
Clique aqui para fazer login e interagir na Comunidade :)