首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >DataGridView:如何使某些单元格不可选?

DataGridView:如何使某些单元格不可选?
EN

Stack Overflow用户
提问于 2010-12-16 21:25:36
回答 3查看 21.8K关注 0票数 20

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

所谓“不可选”,我的意思是:它不能以任何方式被选中,试图选中它也不会取消选择任何其他单元格。

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

DataGridView.MultiSelect需要为false。

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

代码语言:javascript
复制
    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。我需要什么条件和位置来防止这种情况发生?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-16 22:31:55

添加并注释了您所询问的条件。

代码语言:javascript
复制
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;
    }       
}
票数 15
EN

Stack Overflow用户

发布于 2010-12-16 21:32:56

可以使用事件"CellStateChanged“。

代码语言:javascript
复制
private void DataGridViewXYZ_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
                if (e.Cell == null
                    || e.StateChanged != DataGridViewElementStates.Selected)
                    return;
                if (! [condition here : can this cell be selectable ?])
                    e.Cell.Selected = false;
}

编辑:如果您将gridView的MultiSelect属性保留为True,则可以管理包含不可选单元格的“单选”网格视图: il单元格可选,清除其他选择...

票数 6
EN

Stack Overflow用户

发布于 2010-12-16 21:36:04

我相信这篇文章可能会对你有用:

http://blog.spencen.com/2009/04/25/readonly-rows-and-cells-in-a-datagrid.aspx

ReadOnly属性可以应用于整个网格、列、行或单个单元格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4461181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档