【发布时间】: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.EditOnKeystroke或DataGridViewEditMode.EditOnKeystrokeOrF2即可。 -
@JQSOFT - 成功了,谢谢。
-
@JohnG - 没有什么能阻止我这样做,我只是提到了它,以防有人建议可能影响/阻止这种需求的修复。
标签: c# datagridview