c# - DataGridView:如何使某些单元格不可选择?

标签 c# winforms visual-studio-2010 datagridview

如何使 DataGridView 中的某些单元格不可选择?

“不可选择”的意思是:无法以任何方式选择它并且尝试选择它不会取消选择任何其他单元格。

我不是说 ReadOnly。我的单元格已将此属性设置为 true。

DataGridView.MultiSelect 需要为 false。

感谢JYL的回答我写了一段代码:

    private int selectedCellRow = 0;
    private int selectedCellColumn = 0;

    private void grid_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
    {
        if (e.Cell == null || e.StateChanged != DataGridViewElementStates.Selected)
                return;

        if (e.Cell.RowIndex == 0 || e.Cell.ColumnIndex == 0 || e.Cell.RowIndex == 1 && e.Cell.ColumnIndex == 1)
        {
            e.Cell.Selected = false;
            grid.Rows[selectedCellRow].Cells[selectedCellColumn].Selected = true;
        }
        else
        {   
            selectedCellRow = e.Cell.RowIndex;
            selectedCellColumn = e.Cell.ColumnIndex;
        }

        //this was only for seeing what is happening
        //this.Text = selectedCellRow + " " + selectedCellColumn;
    }

但这会导致 StackOverflow。我需要在什么条件下放置什么位置才能防止这种情况发生?

最佳答案

添加并评论了您询问的条件。

private int selectedCellRow = 0;
private int selectedCellColumn = 0;

private void grid_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
    if (e.Cell == null || e.StateChanged != DataGridViewElementStates.Selected)
        return;

    //if Cell that changed state is to be selected you don't need to process
    //as event caused by 'unselectable' will select it again
    if (e.Cell.RowIndex == selectedCellRow && e.Cell.ColumnIndex == selectedCellColumn)
        return;

    //this condition is necessary if you want to reset your DataGridView
    if (!e.Cell.Selected)
        return;

    if (e.Cell.RowIndex == 0 || e.Cell.ColumnIndex == 0 || e.Cell.RowIndex == 1 && e.Cell.ColumnIndex == 1)
    {
        e.Cell.Selected = false;
        grid.Rows[selectedCellRow].Cells[selectedCellColumn].Selected = true;
    }
    else
    {
        selectedCellRow = e.Cell.RowIndex;
        selectedCellColumn = e.Cell.ColumnIndex;
    }       
}

关于c# - DataGridView:如何使某些单元格不可选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4461181/

相关文章:

C# Windows 窗体 - 调整窗体大小时移动元素

c# - Winform 应用程序在将数据上传到数据库时显示超时过期错误

visual-studio-2010 - 我可以在 VS2010 中创建网站项目类型吗

C# 如何使重复输入重叠?

c# - 拆分时如何找到数组最大值

c# - 怎样才能更好的优化这个EpiServer面包屑导航代码呢?

c++ - 使用头文件和 StdAfx.h

c# - 为什么 .NET 设计者不将所有异常保留在系统命名空间中?

c# - 摆脱进度条控件的透明度

c# - 为什么 Visual Studio 2010 的 C# 调试器会继续而不是跳过?