【问题标题】:how to change added Combobox item in datagridview when Data Source changes?数据源更改时如何更改 datagridview 中添加的 Combobox 项?
【发布时间】:2021-07-04 06:12:32
【问题描述】:

我在 from 中添加了两个 datagridviewdatagridview1 命名为 lotDetailDataGridView 及其名为 Quality 的列从 sql 数据库获取数据,datagridview2 命名为 pieceDetailDataGridView 及其名为 quality 的列是组合框列,并从 @987654331 的列 Quality 中获取项目@像这样:

我这样做是为了获取 Quality 的列 lotDetailDataGridView 的项目:

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 列中自动更新。请看一下我在上面添加的参考。 我这样做的尝试给出了一个错误。 请指导我,谢谢。

【问题讨论】:

  • 通过取消选择lotDetailDataGridView 中的值Cadbury,您将其从pieceDetailDataGridView 中的可能值列表中删除。但是您仍然有一个在pieceDetailDataGridView 中选择了Cadbury 的单元格。这就是您看到错误的原因。您正在尝试选择一个不再在您的组合框列表中的值。在离开 CellEndEdit 方法处理程序之前,您必须决定如何处理此值。
  • 这就是我想要的,当我从 lotDetailDataGridView 更改吉百利时,它应该会自动在pieceDetailDataGridView 上更新。新价值取代旧价值。我不知道该怎么做。请帮忙

标签: c# .net visual-studio winforms datagridview


【解决方案1】:

您可以尝试使用 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;
        }

结果:

【讨论】:

  • 非常感谢@jack。你总是那么乐于助人。我有办法通过你的回答来做到这一点。谢谢
猜你喜欢
  • 2012-05-23
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
相关资源
最近更新 更多