【问题标题】:Prevent first cell of DataGridView from being selected when row header clicked防止单击行标题时选择 DataGridView 的第一个单元格
【发布时间】:2020-03-19 15:11:33
【问题描述】:

我需要允许用户通过单击行标题来选择一行以允许删除行,但是当单击行标题时,第一个单元格获得焦点并突出显示文本,我需要防止这样用户不能对第一个单元格进行意外编辑。

以下是正在发生的事情的示例:

如您所见,第一个单元格具有焦点,并且用户可以编辑该单元格,此时只需单击行标题即可。

我尝试了this SO question 的答案,但是当我单击行标题时没有触发任何事件。这是我用于该尝试的代码:

private void dgvCategories_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
    {
        Console.WriteLine("true");
        dgvCategories.ReadOnly = true;
    }
}

private void dgvCategories_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
    if (e.StateChanged == DataGridViewElementStates.Selected)
    {
        Console.WriteLine("false");
        dgvCategories.ReadOnly = false;
    }
}

我还尝试了各种 DataGridViewEditMode 选项,但没有一个能满足我的需要。

DGV SelectionMode 设置为 RowHeaderSelect。

我仍然需要能够在删除过程中获取行中隐藏的“id”字段。这是我的代码:

private void btnDeleteRow_Click(object sender, EventArgs e)
{
    int index = dgvCategories.SelectedRows[0].Index;
    string rowId = dgvCategories[0, index].Value.ToString();

    string deleteString = string.Format("DELETE FROM masterfiles.xref WHERE id = " + rowId);

    conn.Open();
    NpgsqlCommand deleteCmd = new NpgsqlCommand(deleteString, conn);
    deleteCmd.ExecuteNonQuery();
    conn.Close();
}

这行得通;我只需要防止第一个单元格在选择行时自动获得焦点进行编辑。我还需要允许用户选择单个单元格进行编辑。

【问题讨论】:

  • 我相信你有dgvCategories.EditMode = DataGridViewEditMode.EditOnEnter;,所以将其设置为DataGridViewEditMode.EditOnKeystrokeDataGridViewEditMode.EditOnKeystrokeOrF2 即可。
  • @JQSOFT - 成功了,谢谢。
  • @JohnG - 没有什么能阻止我这样做,我只是提到了它,以防有人建议可能影响/阻止这种需求的修复。

标签: c# datagridview


【解决方案1】:

试试看:
1- 选择DataGridView 一行而不是一个单元格。
2- 禁用允许用户编辑DataGridView
3- 使DataGridView 只读。
除了编辑操作之外,一直执行 1 和 2

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 2020-12-20
    • 2011-11-04
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多