2017-04-03 39 views
0

我有一个Datagridview和两个组合框(相关)当我点击dataGridView1_CellMouseClick cmbSehir.Text更改为我想要的。但cmbilce.Text不会因为我的需要而改变!我在哪里犯错误。我希望我明确自己。感谢您的帮助。Datagridview和两个组合框(相关)

private void frmMusteriEkle_Load(object sender, EventArgs e) 
    { 


     GetSehir(); 
     GetDatagridview(); 
    } 
private void GetSehir() { 
     db.connect(); 
     db.SqlQuery("select * from iller"); 
     DataTable dt = db.GeTDataTable(); 
     DataRow dr = dt.NewRow(); 
     dr["id"] = 0; 
     dr["sehir"] = "Seçiniz:"; 
     dt.Rows.InsertAt(dr, 0); 
     cmbSehir.DataSource = dt; 
     cmbSehir.ValueMember = "id"; 
     cmbSehir.DisplayMember = "sehir"; 
     db.disconnect(); 
    } 

private void cmbSehir_SelectionChangeCommitted(object sender, EventArgs e) 
     { 
     if (cmbSehir.SelectedIndex != 0) 
      { 
      db.connect(); 
      db.SqlQuery("select * from ilceler where il_id = ?"); 
      db.command.Parameters.AddWithValue("@p", cmbSehir.SelectedValue); 
      DataTable dt = db.GeTDataTable(); 
      cmbilce.DataSource = dt; 
      cmbilce.ValueMember = "id"; 
      cmbilce.DisplayMember = "ilceler"; 
      db.disconnect(); 
      } 
     else 
      { 
      cmbilce.DataSource = null; 
      } 
     } 
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
     { 
     cmbSehir.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString(); 
     cmbilce.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString(); 
     } 
+0

虽然cmbSehir在加载表单MusteriEkle时被实例化,但cmbSece只有在cmbSehir被更改时才会经历类似的过程。 cmbilce是否已正确格式化并设置为接收“.Text”值的更新? – ARNDG2

+0

我做了我想要的。我在dataGridView1_CellMouseClick事件上调用cmbilce。 thx回答。 – foradream

回答

0

没有看到什么GetDatagridview方法做,我会从线承担......

cmbSehir.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString(); 
cmbilce.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString(); 

,如果组合框有这些组合框与包含在4 5列和数据与DataGridView相同的数据源,则可以将所有三个控件绑定到相同的DataSource。将所有三个组件绑定到同一个数据源后,单击网格中的单元格将自动更改组合框,反之亦然...更改组合框将更改网格中的选择。无需连接CellMouseClickSelectionChanged事件以保持控件同步。

另一个考虑因素是每次用户更改cmbSehir组合框中的选择时触发的cmbSehir_SelectionChangeCommitted方法。在这种方法中,代码查询数据库并设置组合框数据源。这很好,但是,您是否确定要查询数据库并重新填充组合框每次用户更改此选择?我猜测一个查询就足够了,直到新数据被添加,删除或更改。

下面的代码使用不同的ValueMembers将组合框的DataSource设置为DataGridView的同一数据源。

DataTable AllData; 
private void Form1_Load(object sender, EventArgs e) { 
    AllData = GetDT(); 
    dataGridView1.DataSource = AllData; 
    comboBox1.DataSource = AllData; 
    comboBox2.DataSource = AllData; 
    comboBox1.ValueMember = "sehir"; 
    comboBox2.ValueMember = "ilceler"; 
} 
+0

我做了我想要的。我在dataGridView1_CellMouseClick事件上调用cmbilce。 thx回答。 – foradream