Datagridview 和两个组合框(相关)
Datagridview and two combobox (related)
我有一个 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();
}
没有看到 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";
}
我有一个 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();
}
没有看到 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";
}