获取错误:
无法转换类型' bool'至 ' System.Windows.Forms.DataGridViewButtonColumn
换行:
(DataGridViewButtonColumn)row.Cells["Recall"].ReadOnly = true;
请提出任何想法
答案 0 :(得分:1)
有关于如何停用DataGridViewButtonCell
或DataGridViewButtonColumn
here和here的提示。
但是我不确定我有多喜欢它们:很多工作都没什么好处,只有... ...
首先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
:
对于一个Cell:
((DataGridViewButtonCell) dataGridView1[1, 1]).Style.ForeColor =
SystemColors.InativeCaption;
或整个专栏:
((DataGridViewButtonColumn) dataGridView1.Columns[1]).DefaultCellStyle.BackColor =
SystemColors.InactiveCaption;
要使这些工作起作用,您需要将按钮的外观设置为Flat
,例如:
((DataGridViewButtonColumn)dataGridView1.Columns[1]).FlatStyle = FlatStyle.Flat;
答案 1 :(得分:0)
试试这个,
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;
}
}