簡體   English   中英

數據源更改時如何更改datagridview中添加的Combobox項目?

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

我在from中添加了兩個datagridview 名為lotDetailDataGridViewdatagridview1及其名為Quality的列從 sql 數據庫中獲取數據,名為pieceDetailDataGridViewdatagridview2及其名為quality的列是 combobox 列,並從lotDetailDataGridView的列Quality中獲取項目,如下所示:

單元格值無效錯誤

我這樣做是為了獲取lotDetailDataGridViewQuality的項目:

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

結果:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM