c# dataGridView cell添加下拉框


應用場景:

  dataGridView需要某一個cell變成下拉框樣式。

思路詳解:

  dataGridVie添加固定格式的row。

代碼:

                    DataGridViewRow row = new DataGridViewRow();
                    row.Cells.Add(new DataGridViewTextBoxCell());
                    DataGridViewComboBoxCell comboxcell = new DataGridViewComboBoxCell();
                    
                    comboxcell.Items.Add("九");
                    comboxcell.Items.Add("平");
                    comboxcell.Items.Add("氣");
                    comboxcell.Items.Add("陰");
                    comboxcell.Items.Add("陽");
                    comboxcell.Items.Add("痰");
                    comboxcell.Items.Add("氣");
                    comboxcell.Items.Add("血");
                    comboxcell.Items.Add("特");
                    comboxcell.Items.Add("濕");
                    row.Cells.Add(comboxcell);
                    row.Cells.Add(new DataGridViewTextBoxCell());
                    row.Cells.Add(new DataGridViewTextBoxCell());
                    row.Cells.Add(new DataGridViewTextBoxCell());
                    dataGridView_pinggu.Rows.Add(row);

下拉框事件代碼:

private void dataGridView_pinggu_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridView dgv = sender as DataGridView;

            //判斷相應的列
            if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1)
            {

                //給這個DataGridViewComboBoxCell加上下拉事件
                (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);

            }
        }
        public void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {

            ComboBox combox = sender as ComboBox;

            //這里比較重要
            combox.Leave += new EventHandler(combox_Leave);
            try
            {
                //在這里就可以做值是否改變判斷
                if (combox.SelectedItem != null)
                {
                    Console.WriteLine(combox.SelectedItem.ToString());
                    int manNum = ShuJuFenXiService.getNumBySexAndProjectID("0", tizhiDic[combox.SelectedItem.ToString()]);
                    int famNum = ShuJuFenXiService.getNumBySexAndProjectID("1", tizhiDic[combox.SelectedItem.ToString()]);
                    dataGridView_pinggu.Rows[1].Cells[1].Value = combox.SelectedItem.ToString();
                    dataGridView_pinggu.Rows[1].Cells[2].Value = manNum + famNum;
                    dataGridView_pinggu.Rows[1].Cells[3].Value = manNum;
                    dataGridView_pinggu.Rows[1].Cells[4].Value = famNum;
                    dataGridView_pinggu.Rows[1].Cells[5].Value = tizhiDic[combox.SelectedItem.ToString()];
                }
                Thread.Sleep(100);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public void combox_Leave(object sender, EventArgs e)
        {
            ComboBox combox = sender as ComboBox;
            //做完處理,須撤銷動態事件
            combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
        }

 

難點:

  1.注意dataGridView屬性readOnly,設成false(界面模板設置))。要不然下拉框不顯示。如果需要不可編輯,可以設定單元格的readOnly屬性: dataGridView_pinggu.Rows[1].Cells[1].ReadOnly = true;

  2.下拉框事件僅需給datagridview添加EditingControlShowing事件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM