数据源更改时如何更改datagridview中添加的组合框项目?

how to change added Combobox item in datagridview when Data Source changes?

我在发件人中添加了两个 datagridview。名为 lotDetailDataGridViewdatagridview1 及其名为 Quality 的列从 sql 数据库和名为 pieceDetailDataGridViewdatagridview2 及其名为 [=17= 的列中获取数据] 是一个组合框列,从 lotDetailDataGridViewQuality 列获取项目,如下所示:

我这样做是为了获取 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;
        }

结果: