【问题标题】:Datagridview and two combobox (related)Datagridview和两个combobox(相关)
【发布时间】:2017-08-28 17:46:49
【问题描述】:

我有一个 Datagridview 和两个组合框(相关)当我单击 dataGridView1_CellMouseClick cmbSehir.Text 时,我会根据需要更改。但 cmbilce.Text 并没有按我的意愿改变!我在哪里犯错误。我希望我说清楚了。感谢您的帮助。

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();
        }

【问题讨论】:

  • 虽然 cmbSehir 在加载 MusteriEkle 表单时被实例化,但 cmbilce 只有在 cmbSehir 已更改时才会经历类似的过程。 cmbilce 的格式是否正确并设置为接收其.Text 值的更新?
  • 我做了我想做的事。我在 dataGridView1_CellMouseClick 事件上调用 cmbilce。谢谢回答。

标签: c# datagridview combobox selectedindexchanged


【解决方案1】:

没有看到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。将所有三个组件绑定到同一个数据源后,单击网格中的单元格将自动更改组合框,反之亦然……更改组合框将更改网格中的选择。无需连接 CellMouseClick 或 SelectionChanged 事件以保持控件同步。

另一个考虑因素是每次用户更改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";
}

【讨论】:

  • 我做了我想做的事。我在 dataGridView1_CellMouseClick 事件上调用 cmbilce。谢谢回答。
猜你喜欢
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多