将数据网格视图按钮单元格设为只读
本文关键字:单元格 只读 按钮 视图 数据 数据网 网格 | 更新日期: 2023-09-27 17:57:19
获取错误:
无法将类型"bool"转换为 'System.Windows.Forms.DataGridViewButtonColumn
对于行:
(DataGridViewButtonColumn)row.Cells["Recall"].ReadOnly = true;
任何想法,请
如何禁用DataGridViewButtonCell
或DataGridViewButtonColumn
的提示 这里和这里.
不确定我有多喜欢他们:很多工作却收效甚微,afaics..
首先,无论如何,DataGridViewButtonCell
都不是真正的Button
。它被渲染为Button
,但这实际上只是视觉效果。
这与任何其他单元格类型不同:在 TextCell 中,覆盖了一个真实的TextBox
,对于 ComboBoxCell 或 CheckBoxCells,同样显示了真实的ComboBox
和真实的CheckBox
控件,可以在EditingControlShowing
事件中抓取和操作这些控件。您甚至可以向这些控件添加事件处理程序。
对于ButtonCell来说并非如此。在这里,您需要对CellClick
或CellContentClick
事件进行编码,例如查询e.ColumIndex
值以确定列,通常还需要确定单击的单元格的e.RowIndex
。
因此,功能禁用无论如何都会涉及此代码。下面是一个使用 ReadOnly
属性的示例,该属性本身不会在 ButtonCell 中执行任何操作:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
if (cell.OwningColumn.CellType == typeof(DataGridViewButtonCell)
&& cell.ReadOnly) Console.Write("This Cell is Disabled");
}
设置它的语法是针对 sinlge 单元格或整个列:
((DataGridViewButtonCell)dataGridView1[1, 1]).ReadOnly = true;
dataGridView1.Columns[1].ReadOnly = true;
请注意,将整列设置为 ReadOnly
后,您无法将单个Button
设置回 ReadOnly = false
!
您可以通过设置ForeColor
直观地指示禁用状态:
对于一个单元格:
((DataGridViewButtonCell) dataGridView1[1, 1]).Style.ForeColor =
SystemColors.InativeCaption;
或者对于整个列:
((DataGridViewButtonColumn) dataGridView1.Columns[1]).DefaultCellStyle.BackColor =
SystemColors.InactiveCaption;
要使这些工作,您需要将按钮的外观设置为Flat
,例如:
((DataGridViewButtonColumn)dataGridView1.Columns[1]).FlatStyle = FlatStyle.Flat;
试试这个,
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
var dgv = (DataGridView)sender;
if (dgv.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
dgv.Rows[e.RowIndex].Cells["Recall"].ReadOnly = true;
}
}