数据源更改时如何更改datagridview中添加的组合框项目?
how to change added Combobox item in datagridview when Data Source changes?
我在发件人中添加了两个 datagridview
。名为 lotDetailDataGridView
的 datagridview1
及其名为 Quality
的列从 sql 数据库和名为 pieceDetailDataGridView
的 datagridview2
及其名为 [=17= 的列中获取数据] 是一个组合框列,从 lotDetailDataGridView
的 Quality
列获取项目,如下所示:
我这样做是为了获取 lotDetailDataGridView
的第 Quality
列的项目:
private void addQualityToCombo()
{
string[] val = new string[lotDetailDataGridView.Rows.Count - 1];
for (int i = 0; i < lotDetailDataGridView.Rows.Count - 1; i++)
{
if (lotDetailDataGridView[1, i].Value != null)
{
val[i] = lotDetailDataGridView[1, i].Value.ToString();
pieceDetailQualityColumn.DataSource = val;
}
}
}
private void lotDetailDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
addQualityToCombo();
}
我想要的是当我更改 pieceDetailDataGridView's
quality
列中的值时,它应该自动更新到 lotDetailDataGridView's
Quality
列。请看一下我在上面添加的参考。
我这样做的尝试给出了一个错误。
请指导我,谢谢。
您可以尝试使用dataGridView2_EditingControlShowing事件和ComboBox_SelectedValueChanged事件来更新列。
这是一个代码示例,您可以参考。
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Columns.Add("column1","Name");
var list = Getlist();
DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
cmb.HeaderText = "Quantity";
cmb.Name = "cmb";
cmb.MaxDropDownItems = 6;
cmb.DataSource = list;
cmb.DataPropertyName = "comboboxValue";
dataGridView1.Columns.Add(cmb);
dataGridView1.Columns.Add("column2", "Weight");
DataGridViewComboBoxColumn cmb1 = new DataGridViewComboBoxColumn();
cmb1.HeaderText = "Quantity";
cmb1.Name = "cmb";
cmb1.MaxDropDownItems = 6;
cmb1.DataSource = list;
cmb1.DataPropertyName = "comboboxValue";
dataGridView2.Columns.Add(cmb1);
dataGridView1.AllowUserToAddRows = false;
}
public List<string> Getlist()
{
List<string> list = new List<string>();
string connstr = connstr";
SqlConnection connection = new SqlConnection(connstr);
connection.Open();
SqlCommand command = new SqlCommand("select Quantity from Product", connection);
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
string result = reader[0].ToString();
list.Add(result);
}
connection.Close();
return list;
}
private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
}
private void dataGridView2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView2.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox)
{
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectedValueChanged -= ComboBox_SelectedValueChanged;
comboBox.SelectedValueChanged += ComboBox_SelectedValueChanged;
}
}
private void ComboBox_SelectedValueChanged(object sender, EventArgs e)
{
var text = ((ComboBox)sender).Text;
int rowindex = dataGridView2.CurrentCell.RowIndex;
int count = dataGridView2.RowCount;
int rowcount = dataGridView1.RowCount;
if (count != rowcount)
{
dataGridView1.Rows.Add(1);
}
dataGridView1.Rows[rowindex].Cells[1].Value = text;
}
结果:
我在发件人中添加了两个 datagridview
。名为 lotDetailDataGridView
的 datagridview1
及其名为 Quality
的列从 sql 数据库和名为 pieceDetailDataGridView
的 datagridview2
及其名为 [=17= 的列中获取数据] 是一个组合框列,从 lotDetailDataGridView
的 Quality
列获取项目,如下所示:
我这样做是为了获取 lotDetailDataGridView
的第 Quality
列的项目:
private void addQualityToCombo()
{
string[] val = new string[lotDetailDataGridView.Rows.Count - 1];
for (int i = 0; i < lotDetailDataGridView.Rows.Count - 1; i++)
{
if (lotDetailDataGridView[1, i].Value != null)
{
val[i] = lotDetailDataGridView[1, i].Value.ToString();
pieceDetailQualityColumn.DataSource = val;
}
}
}
private void lotDetailDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
addQualityToCombo();
}
我想要的是当我更改 pieceDetailDataGridView's
quality
列中的值时,它应该自动更新到 lotDetailDataGridView's
Quality
列。请看一下我在上面添加的参考。
我这样做的尝试给出了一个错误。
请指导我,谢谢。
您可以尝试使用dataGridView2_EditingControlShowing事件和ComboBox_SelectedValueChanged事件来更新列。
这是一个代码示例,您可以参考。
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Columns.Add("column1","Name");
var list = Getlist();
DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
cmb.HeaderText = "Quantity";
cmb.Name = "cmb";
cmb.MaxDropDownItems = 6;
cmb.DataSource = list;
cmb.DataPropertyName = "comboboxValue";
dataGridView1.Columns.Add(cmb);
dataGridView1.Columns.Add("column2", "Weight");
DataGridViewComboBoxColumn cmb1 = new DataGridViewComboBoxColumn();
cmb1.HeaderText = "Quantity";
cmb1.Name = "cmb";
cmb1.MaxDropDownItems = 6;
cmb1.DataSource = list;
cmb1.DataPropertyName = "comboboxValue";
dataGridView2.Columns.Add(cmb1);
dataGridView1.AllowUserToAddRows = false;
}
public List<string> Getlist()
{
List<string> list = new List<string>();
string connstr = connstr";
SqlConnection connection = new SqlConnection(connstr);
connection.Open();
SqlCommand command = new SqlCommand("select Quantity from Product", connection);
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
string result = reader[0].ToString();
list.Add(result);
}
connection.Close();
return list;
}
private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
}
private void dataGridView2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView2.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox)
{
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectedValueChanged -= ComboBox_SelectedValueChanged;
comboBox.SelectedValueChanged += ComboBox_SelectedValueChanged;
}
}
private void ComboBox_SelectedValueChanged(object sender, EventArgs e)
{
var text = ((ComboBox)sender).Text;
int rowindex = dataGridView2.CurrentCell.RowIndex;
int count = dataGridView2.RowCount;
int rowcount = dataGridView1.RowCount;
if (count != rowcount)
{
dataGridView1.Rows.Add(1);
}
dataGridView1.Rows[rowindex].Cells[1].Value = text;
}
结果: