DataGridView 内含 ComboBox的用法(赋值,两个下拉框联动,得到下拉框所取值) 您所在的位置:网站首页 vb中datagridview控件 DataGridView 内含 ComboBox的用法(赋值,两个下拉框联动,得到下拉框所取值)

DataGridView 内含 ComboBox的用法(赋值,两个下拉框联动,得到下拉框所取值)

2024-06-16 22:14| 来源: 网络整理| 查看: 265

1. 创建一个窗口

右边的部分即为一个datagridview表,表名为OrganNameChange(后续代码会用到);

表包含四列:“Organ Names” 为文本框,“Check”为勾选框,“Type”和“Rename”均为下拉框。

1.1  datagridview的基本设置

这里的datagridview的基本设置有:

表的前一列不显示(c#默认显示):RowHeadersVisible 设为true;

表的最后一行不显示:AllowUserToAddRows 设为 false;

整个表的颜色想要交替出现:AlternatingRowsDefaultCellStyle中的背景色设置;

表的只读属性:设置ReadOnly

1.2 表格的功能介绍

表格第一列:“Organ Names”需要从外部读入数据;

表格第二列:在“All”勾选后,所有第二列全部被勾选,同时下拉框清空;一旦第二列中的一个被取消勾选,“All”也取消勾选,同时这一个单元格所在的行“Type”被初始化,可以进行下拉操作;

表格第三列:“Type”被选择后,“Rename”根据“Type”中所选的内容进行初始化,同时可以进行下拉操作;

表格第四列:“Rename”被选择后,得到下拉框所选的内容,将该列的值存储。

2. 功能实现 2.1 界面初始化

界面在打开时,可对整个界面进行初始化,并注册事件,代码如下(datagridview名为OrganNameChange)

private void InitializeView() { All_check.Checked = true; All_check_CheckedChanged(null, null); this.OrganNameChange.EditingControlShowing -= new DataGridViewEditingControlShowingEventHandler(OrganNameChange_EditingControlShowing); this.OrganNameChange.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(OrganNameChange_EditingControlShowing); this.OrganNameChange.CellClick -= new DataGridViewCellEventHandler(OrganNameChange_CellClick); this.OrganNameChange.CellClick += new DataGridViewCellEventHandler(OrganNameChange_CellClick); this.OrganNameChange.DataError += delegate(object sender, DataGridViewDataErrorEventArgs e){ }; }

其中加载了“All”的初始状态和“All”被勾选后的其他联动;剩余几个就是下拉框的一些事件了。

2.2  “All” checkbox的勾选事件

所有第二列全部被勾选,同时下拉框清空

private void All_check_CheckedChanged(object sender, EventArgs e) { if(All_check.Checked) { for(int k = 0; k < OrganNameChange.RowCount; k++) { OrganNameChange.Rows[k].Cells["Check"].Value = true; DataGridViewComboBoxCell groupNames = (DataGridViewComboBoxCell)OrganNameChange.Rows[k].Cells["Type"]; DataGridViewComboBoxCell organNames = (DataGridViewComboBoxCell)OrganNameChange.Rows[k].Cells["Rename"]; groupNames.Items.Clear(); organNames.Items.Clear(); groupNames.ReadOnly = true; organNames.ReadOnly = true; } } } 2.3 每列CheckBox 的勾选状态事件

一旦第二列中的一个被取消勾选,“All”也取消勾选,同时这一个单元格所在的行“Type”被初始化,可以进行下拉操作

private void OrganNameChange_CellContentClick(object sender, DataGridViewCellEventArgs e) { int k = e.RowIndex; DataGridViewCheckBoxCell check_cur = (DataGridViewCheckBoxCell)OrganNameChange.Rows[k].Cells["Check"]; DataGridViewComboBoxCell groupNames = (DataGridViewComboBoxCell)OrganNameChange.Rows[k].Cells["Type"]; DataGridViewComboBoxCell organNames = (DataGridViewComboBoxCell)OrganNameChange.Rows[k].Cells["Rename"]; if(e.ColumnIndex == 1) //checkBox改动 { bool flag = Convert.ToBoolean(check_cur.EditedFormattedValue); if(!flag) { All_check.Checked = false; groupNames.ReadOnly = false; organNames.ReadOnly = false; foreach (TreeSave groupInfo in allOrganInfo.Nodes) { //从外部传入数据,改变下拉框的items groupNames.Items.Add(groupInfo.Data.ItemName); } } else { groupNames.Items.Clear(); organNames.Items.Clear(); groupNames.ReadOnly = true; organNames.ReadOnly = true; } } }

2.4 下拉框的选择和初始化

private void OrganNameChange_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if(OrganNameChange.CurrentCell != null && e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) { //向用户显示用于编辑选定单元格的值中的控件 tempGroupName = e.Control as ComboBox; //创建下拉框改变事件 (tempGroupName).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); (tempGroupName).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged); } } /// /// 这里可以开始写下拉框具体要做什么 /// /// /// private void ComboBox_SelectedIndexChanged(object sender,EventArgs e) { int k = OrganNameChange.CurrentCell.RowIndex; DataGridViewComboBoxCell ReOrganNames = (DataGridViewComboBoxCell)OrganNameChange.Rows[k].Cells["Rename"]; if(OrganNameChange.CurrentCell.ColumnIndex == 2) //在Type栏选择后,对Rename栏初始化 { ReOrganNames.Items.Clear(); foreach (TreeSave organInfo in allOrganInfo.Nodes[0].Nodes) { ReOrganNames.Items.Add(organInfo.Data.ItemName); } } if(OrganNameChange.CurrentCell.ColumnIndex == 3) //在Rename栏中选中organname后 { string curName = tempGroupName.Text.ToString(); OrganNameChange.CurrentCell.Value = curName; standOrganNames[k] = curName; //把下拉框选中的值传至standOrganNames储存起来 } } /// /// datagridview中单元格被点击后的事件 /// /// /// private void OrganNameChange_CellClick(object sender, DataGridViewCellEventArgs e) { DataGridView tempDataGridView = sender as DataGridView; DataGridViewComboBoxEditingControl ec = tempDataGridView.EditingControl as DataGridViewComboBoxEditingControl; if(ec == null) //当前ComboBox不在编辑状态 { SendKeys.Send("{F4}"); //展开当前ComboBoxCell } }

所有功能实现就到此结束了。

3. 实际效果



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有