如何在DataGridView中禁用单击空行

本文关键字:单击 DataGridView | 更新日期: 2023-09-27 18:16:44

如何在DataGridView的空行上禁用单击/光标?我有交替的行,一行有数据,另一行空然后一行有数据,然后一行空。我想禁用点击空/空行。

我已经改进了我的代码多亏了微风,部分得到了我想要的,但这显然适用于每个细胞。我如何实现这段代码,使只读模式为真,只有完全空的行,而不是那些行,甚至有一个单元格包含数据。

 private void dataGridView3_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex < 0 || e.RowIndex < 0)
        {
            return;
        }
        var dataGridView = (sender as DataGridView);
        try
        {
            int col = e.ColumnIndex;
            int row = e.RowIndex;
            var cell = ((DataGridView)sender)[col, row];
            if (cell != null && cell.Value != "")
            {
                dataGridView.Cursor = Cursors.Hand;
            }
            else
            {
                dataGridView.Cursor = Cursors.No;
                dataGridView.ReadOnly = true;
            }
        }
        catch (Exception es)
        {
            MessageBox.Show(es.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }

谢谢你的帮助

如何在DataGridView中禁用单击空行

不仅要检查对单元格的引用是否为空,还要检查单元格的值是否为空字符串。为此,展开

if(cell != null) 

if(cell != null && cell.Value != "")

检查cell是否为null并不是真正必要的,但它不会造成伤害,并保护您避免在进一步开发中可能发生的一些错误

这样就可以了。这可能需要根据您的实例进行调整,并且可能应该使用"!"="从结构中删除几行。

internal void AllRows_OnClick(object sender, EventArgs e){
    int rowIndex = e.RowIndex;//Get Row that was clicked
    DataGridViewRow row = dataGridView1.Rows[rowIndex];//update to Row
    if (row.Cells[1].Value.ToString() == ""){
        //Do Nothing
    }else{
        //Do Something
    }
}