【问题标题】:How can I prevent cells in the "new" datagridview row from being selected if there are multiple datagridview rows selected?如果选择了多个 datagridview 行,如何防止选择“新”datagridview 行中的单元格?
【发布时间】:2011-05-24 00:43:23
【问题描述】:

不要问为什么,但我需要一种方法来防止用户在选择了多行时在“新”datagridview 行中输入单元格。

当前,鼠标在单击和拖动过程中悬停在行的第一列中的单元格正在被选中。如果单击单元格,则不再选择行,因此您不能使用任何单元格单击事件或任何东西。

欢迎提出任何建议。

附:不要尝试从 selectionchanged 事件中编辑当前单元格,已经尝试过了!

谢谢,

艾萨克

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    我知道 DataGridView 控件有一个 RowState 属性。当您的行被选中时,检查状态。我不确定状态是什么(如果我什至在球场上)......无论如何,你也许可以检查那条路线。

    我正在寻找更多信息......

    好的……我想我找到了一个不错的方法:

    void DataGridView1_RowsAdded (object sender, DataGridViewRowsAddedEventArgs e)
    {
        currentNewRow = e.RowIndex;
    }
    
    void DataGridView1_CellMouseClick(Object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex == currentNewRow)
        {
            // don't add to Selection
        }
    } 
    

    【讨论】:

    • 抱歉,我的问题应该更具体一些。问题是当您选择多行时,它实际上是为鼠标所在行选择第一列的单元格。因此,如果您单击并拖动以选择多行并释放,您仍然有一个选定的单元格而不实际单击它。
    【解决方案2】:

    使用 CellStateChanged 事件:

    private void dataGridView_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e) {
                if (e.Cell.OwningRow.IsNewRow && dataGridView.SelectedRows.Count > 1)
                    e.Cell.Selected = false;
            }
    

    【讨论】:

    • 抱歉,除非我单击单元格,否则单元格状态更改不会触发。但是如果我点击单元格,那么选定的行 = 0。
    猜你喜欢
    • 2011-11-04
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多