每当用户单击选择整行(并将其突出显示为蓝色)的行标题时,实际上会输入第一列中的单元格。也就是说,如果您开始输入内容,则文本将进入该单元格。我想阻止这个。当选择一行或多行时,是否可以不输入datagridview单元格?
我还需要一种解决方案,以防止在行标题上单击并拖动导致多行选择时输入单元格。
关于如何实现这一目标的任何想法?
由于
艾萨克
答案 0 :(得分:2)
将DataGridView的ReadOnly属性设置为true或false,具体取决于是选择了一行还是多行,或者DGV的'CellState'是否已更改。
为DataGridView添加以下两个事件:
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) {
if (e.StateChanged == DataGridViewElementStates.Selected) {
Console.WriteLine("TRUE");
dataGridView1.ReadOnly = true;
}
}
private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e) {
if (e.StateChanged == DataGridViewElementStates.Selected) {
Console.WriteLine("false");
dataGridView1.ReadOnly = false;
}
}
这在我的测试中对我有用,但如果有隐藏的'陷阱',我不会感到惊讶。
答案 1 :(得分:0)
另一种解决方案可能是这样的:
private void dataGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && dataGrid.Rows[e.RowIndex].Selected)
return;
}
答案 2 :(得分:0)
基于" Jay R"的回答我调整了一些代码,以免丢失单元格的只读标志。
private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (e.StateChanged == DataGridViewElementStates.Selected)
e.Row.DataGridView.EditMode = DataGridViewEditMode.EditProgrammatically;
}
private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
if (e.StateChanged == DataGridViewElementStates.Selected)
// adjust the edit mode to your "default" edit mode if you have to
e.Cell.DataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
}