动态修改DataGridView单元格的类型和编辑单元格
程序员文章站
2022-06-08 16:14:12
...
DataGridView有六种列类型,当选择了列类型后对应到该列下的单元格会显示为对应的类型,不过这个类型是设计时指定的,当程序运行时要改变单元格的类型还是比较麻烦的。此文来聊一下如何在运行时改变单元格的类型。
与DataGridView的六种列类型对应的有六种单元格类型,比如与DataGridViewComboBoxColumn列对应的单元格类型为DataGridViewComboBoxCell,其基类为DataGridViewCell,其余五种单元格类型的基类也是DataGridViewCell类。通过DataGridView的rows属性获取指定的行,该行的cells属性获取到的是单元格的集合类型为DataGridViewCellCollection,通过cells[0]方式获取到的单元格类型为DataGridViewCell。到此,一种改变单元格类型的思路就出来了,既然单元格的类型为DataGridViewCell,那么把DataGridViewCell子类的一个对象赋值给它当然是可以的,这样就实现了单元格类型的改变。代码如下。
代码同时实现了改变了类型后的单元格可以编辑。
this.dgv_Data.ReadOnly = false; //设置DataGridView全局非只读即可以编辑其单元格
//单击事件
private void dgv_Data_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0) return;
//实例化一个DataGridViewComboBoxCell对象,用于下面单元格类型的改变
DataGridViewComboBoxCell cbb = new DataGridViewComboBoxCell();
cbb.Items.Add("true");
cbb.Items.Add("false");
cbb.ReadOnly = false; //设置comboBox可编辑
//获取当前列的头部标题
string headerText = this.dgv_Data.Columns[e.ColumnIndex].HeaderText;
switch (headerText)
{
case "操作":
//获取要编辑的单元格的值,按值改变单元格编辑时的类型
string cellValue = this.dgv_Data.Rows[e.RowIndex].Cells["Value"].Value.ToString();
//若为bool值,则编辑时转换为下拉列表类型
if (cellValue == "true"||cellValue=="false")
{
this.dgv_Data.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected = false;
this.dgv_Data.Rows[e.RowIndex].Cells["Value"].ReadOnly = false;
this.dgv_Data.Rows[e.RowIndex].Cells["Value"] = cbb;
//this.dgv_Data.Rows[e.RowIndex].Cells["Value"].Selected = true;
cbb.DisplayStyleForCurrentCellOnly = true;
cbb.Selected = true;
//将指定单元格以外的的单元格(或者行、列)的ReadOnly设置为true,只有指定的单元格可以编辑。这是实现指定单元格可以编辑的关键
foreach (DataGridViewRow row in this.dgv_Data.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (cell!= this.dgv_Data.Rows[e.RowIndex].Cells["Value"])
{
cell.ReadOnly = true;
}
}
}
}
break;
default:
break;
}
}
注:上面代码运行时必须在选中单元格后再单击可以编辑即可以进行选择,操作上就表现为必须单击两次(不是双击)才能进行编辑。暂时没有找到解决的办法,请大神指点。
推荐阅读
-
PHP+ajax实现可以编辑的单元格点击可以修改
-
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
-
Excel的列表table功能和单元格自定义实现动态数据统计
-
el-table 如何动态的修改某一单元格中字体颜色
-
动态渲染可编辑单元格的Table
-
Excel中操作各种不同类型的单元格和区域完整教程
-
新增和修改数据,封装一个组件,运用于不同页面和不同类型,form表单中有可编辑的表格(父子传值,antd-Form表单的二次封装)
-
动态修改DataGridView单元格的类型和编辑单元格
-
PHP+ajax实现可以编辑的单元格点击可以修改
-
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题