只读datagridview按钮单元格

时间:2016-07-18 07:10:14

标签: c#

获取错误:

  

无法转换类型' bool'至   ' System.Windows.Forms.DataGridViewButtonColumn

换行:

(DataGridViewButtonColumn)row.Cells["Recall"].ReadOnly = true;

请提出任何想法

2 个答案:

答案 0 :(得分:1)

有关于如何停用DataGridViewButtonCellDataGridViewButtonColumn herehere的提示。

但是我不确定我有多喜欢它们:很多工作都没什么好处,只有... ...

首先DataGridViewButtonCell不是真正的Button。它呈现为Button,但这只是视觉效果。

这与任何其他单元格类型不同:在TextCell中有一个真实的TextBox重叠,对于ComboBoxCell或CheckBoxCells同样显示真实ComboBox和真实CheckBox控件,其中可以在EditingControlShowing事件中抓取和操纵。您甚至可以向这些控件添加事件处理程序..

ButtonCell不是这样。在这里,您需要对CellClickCellContentClick个事件进行编码并查询,例如用于确定列的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后,您无法设置单个 ButtonReadOnly = 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;   
    }    
    }