場景
滑鼠點擊DataGridView的某個單元格時,此單元格添加一個自定義的控制元件,這里以
添加下拉框為例
效果

注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載,
實作
在設計器頁面,找到DataGridView的單元格點擊事件CellClick,然后雙擊進入其點擊事件中

private void dataGridView_Task_ViewEdit_CellClick(object sender, DataGridViewCellEventArgs e) { //獲取當前點擊的列的index int currentColumnindex = dataGridView_Task_ViewEdit.CurrentCell.ColumnIndex; //獲取當前行的index int currentRowindex = dataGridView_Task_ViewEdit.CurrentCell.RowIndex; switch (currentColumnindex) { case 2: //第三列-控制模式 Cell2Click(currentColumnindex,currentRowindex); break; case 3: //第四列-跳轉條件 break; case 4: //第五列-記錄條件 break; case 5: //第六列-電流量程 break; default: break; } }
然后在通過當前列的Index判斷是那一列,再執行具體的操作,添加不同的控制元件,
這里操作第三列,然后執行方法Cell2Click,并將當前行與列的index傳遞,
private void Cell2Click(int currentColumnindex, int currentRowindex) { //下拉框控制元件 DevExpress.XtraEditors.ComboBoxEdit comboBox = new DevExpress.XtraEditors.ComboBoxEdit(); //添加ComboBox comboBox.Name = "ControlModel_ComBox"; ComboBoxItemCollection coll = comboBox.Properties.Items; //添加 this.dataGridView_Task_ViewEdit.Controls.Add(comboBox); //獲取當前單元格的內容 string currentCellValue = https://www.cnblogs.com/badaoliumangqizhi/p/this.dataGridView_Task_ViewEdit.Rows[currentRowindex].Cells[currentColumnindex].Value.ToString(); //清空單元格內容 this.dataGridView_Task_ViewEdit.Rows[currentRowindex].Cells[currentColumnindex].Value =https://www.cnblogs.com/badaoliumangqizhi/p/ String.Empty; //獲取大小 Rectangle rect = dataGridView_Task_ViewEdit.GetCellDisplayRectangle(currentColumnindex, currentRowindex, true); //大小設定 comboBox.Size = new Size((rect.Width / 3), rect.Height); //位置設定 comboBox.Location = new Point(rect.Left, rect.Top); //根據組態檔獲取下拉框items選項 int i=0; List<ControlModelItem> controlModelItems = TaskViewEditHelper.GetComboBoxItems(System.IO.Path.Combine(Global.AppConfig.SysConfigPath, Global.CONTROL_MODEL_ITEMS_FILE_PATH)); foreach(ControlModelItem controlModelItem in controlModelItems) { coll.Add(controlModelItem); if (controlModelItem.Value =https://www.cnblogs.com/badaoliumangqizhi/p/= currentCellValue) comboBox.SelectedIndex = i; i++; } //通過下面可以獲取選中項的內容 ////if (comboBox.SelectedItem != null) ////{ //// string key = (comboBox.SelectedItem as ControlModelItem).Key; //// string value = https://www.cnblogs.com/badaoliumangqizhi/p/(comboBox.SelectedItem as ControlModelItem).Value; ////} //系結事件--控制模式下拉框選項改變 comboBox.SelectedValueChanged += comboBox_SelectedValueChanged; }
這里是添加了一個DevExpress的下拉框控制元件ComboBoxEdit控制元件,并添加下拉框選項,然后系結下拉框內容改變的事件comboBox_SelectedValueChanged,
同理在改變下拉框選項的事件中在分別實作添加控制元件
private void comboBox_SelectedValueChanged(object sender, EventArgs e) { int controlCount = this.dataGridView_Task_ViewEdit.Controls.Count; //初始化會有三個控制元件 if (controlCount>3) { for (int i = 3; i < controlCount; i++) { //洗掉第三個之后的控制元件,洗掉后索引減1 所以回圈洗掉第四個控制元件 this.dataGridView_Task_ViewEdit.Controls.RemoveAt(3); } } DevExpress.XtraEditors.ComboBoxEdit comboBox = sender as ComboBoxEdit; ControlModelItem controlModelItem = comboBox.SelectedItem as ControlModelItem; string controlModelItemkey = controlModelItem.Key; switch (controlModelItemkey) { //恒壓 case "ConstantVoltage": int currentColumnindex = dataGridView_Task_ViewEdit.CurrentCell.ColumnIndex; int currentRowindex = dataGridView_Task_ViewEdit.CurrentCell.RowIndex; TextEdit textEdit = new TextEdit(); textEdit.Name = "ControlMode_ConstantVoltage_textEdit"; this.dataGridView_Task_ViewEdit.Controls.Add(textEdit); //獲取大小 Rectangle rect = dataGridView_Task_ViewEdit.GetCellDisplayRectangle(currentColumnindex, currentRowindex, true); //大小設定 textEdit.Size = new Size((rect.Width / 6) + Global.CONTROL_DISTANCE, rect.Height); //位置設定 textEdit.Location = new Point(rect.Left + (rect.Width / 3), rect.Top); LabelControl label = new LabelControl(); label.Name = "ControlMode_ConstantVoltage_label"; this.dataGridView_Task_ViewEdit.Controls.Add(label); label.Text = "V"; //位置設定 label.Location = new Point(rect.Left + (rect.Width / 3) + (rect.Width / 6) + Global.CONTROL_DISTANCE * 2, rect.Top + Global.LABEL_FROM_TOP_DISTANCE); break; case "Shelve": break; case "ConstantCurrent": break; case "ConstantPower": break; case "ConstantLoad": break; case "Cycle": break; case "CurrentSlope": break; case "CurrentLadder": break; case "ConstantVoltageLimitCurrent": break; case "CurrentPulse": break; case "WorkingConditionSimulation": break; case "PowerRamp": break; case "PowerLadder": break; default: break; } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/112670.html
標籤:C#
