中易网

请问在DataGridView中怎样禁止光标离开当前行(实际是要实现在当前行未保存前,禁止光标离开该行)

答案:2  悬赏:0  
解决时间 2021-04-28 17:55
  • 提问者网友:我稀罕你
  • 2021-04-27 20:19
已试过RowValidating事件中的e.cancel,不过这个不行,因为不是录入数据错误,而且一旦设置了e.cancel=true,连保存按钮也点不了。急等回复。多谢多谢!

一楼的方法不错,但只解决了部分问题,我前面也用的你类似的方法,只是不论是用DataGridView的RowValidated事件还是Rowenter、Rowleave等来返回Datagridview的CurrentCell都不起作用,除了这个CellClick可以立即返回原编辑行。但这个只是点了鼠标才有效,如果是用户修改数据后,敲了回车键或按了上下键头键,则约束完全失效!还请教有没有更近一步的解决办法?
谢谢!
最佳答案
  • 二级知识专家网友:野性且迷人
  • 2021-04-27 21:59
你可以试试这个,你是不是要在DataGridView中无论点哪一行,都会回到你编辑的那一行?
先对保存按钮写代码
向DataGridView的编辑事件传一个参数,不过首先要在窗体的Load函数中先给这个参数赋值
如定义一个整数
int allowEn;
在load中赋值为1,在Button的单击事件中再次赋值为1,但是要在DataGridView的单击事件中将其赋为0,在其为0的时候不允许DataGridView行增加。

并且定义一个整数记录现在DataGridView的行数
如:
int Row;
Row= dataGridView1.Rows.Count-1;
你可以写一个DataGridView的单击事件,令单击时都会将DataGridView的可编辑行放在Button记录的那一行+1上
我大概写了一个简单的
int allowEn;
int Row;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
allowEn = 1;
}

private void button1_Click(object sender, EventArgs e)
{
Row = dataGridView1.Rows.Count-1;
allowEn = 1;
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//if (dataGridView1.CurrentRow.Index ==Convert.ToInt32( Row))
//{

// allowEn = 1;
//}
if (allowEn == 0)
{
int cell = Convert.ToInt32(dataGridView1.CurrentCell.ColumnIndex);
this.dataGridView1.CurrentCell = dataGridView1.Rows[Row].Cells[cell];
dataGridView1.BeginEdit(true);
}

}

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
allowEn = 0;
}
全部回答
  • 1楼网友:冷态度
  • 2021-04-27 22:33
datagridview1.currentcell=datagridview1.rows[e.rowindex].cells[e.columnindex];
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息