0

我有DataGridView一个表格。我只需要在查看模式下禁用它,没有突出显示选定的行等。

带有图像的一列必须是可点击的,带有手形光标。
由于CellClick网格被禁用,“CellMouseEnter”事件没有触发。

有什么解决办法吗?

4

1 回答 1

1

DataGridView首先,使用Designer定义一些属性。
选择DataGridView,在其属性列表中,找到DefaultCellStyle并打开编辑器。

我们需要将SelectionForeColorand设置SelectionBackColorForeColorandBackColor属性。这将防止在选择时修改单元格颜色。在这里,
我设置Color.WhiteBackGroundColor.Black。 将其更改为您喜欢的任何内容,它们只需要对两相同即可。ForeGround

DataGridView DefaultCellStyle 属性

在您设置完DataSourceDataGridView或以其他方式插入数据行)之后,修改所有列的只读属性,如果需要,修改除显示图像的列之外的所有列的冻结属性。在这里,我只是使用一个int设置为列索引的字段。
它也可以通过检查[Cell].ValueType每个 Column 来得出。

//Define which Column contains an Image
int ImageColumn = 2;

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    if (column.Index != ImageColumn)
    {
        column.Frozen = true;
        column.ReadOnly = true;
    }
}

订阅CellMouseEnterCellMouseLeave事件。
这些用于在鼠标指针进入包含图像的单元格时将光标更改为经典的手形,并在离开时将其重置为默认值。

在这里,我订阅了表单构造函数中的事件,但您也可以通过DataGridView控件的事件列表使用设计器生成的事件处理程序。

public form1()
{
    InitializeComponent();

    this.dataGridView1.CellMouseEnter += (s, e) => 
        { if (e.ColumnIndex == ImageColumn) dataGridView1.Cursor = Cursors.Hand; };

    this.dataGridView1.CellMouseLeave += (s, e) => 
        { if (e.ColumnIndex == ImageColumn) dataGridView1.Cursor = Cursors.Default; };
}
于 2018-11-06T12:40:06.507 回答