C# 将光标保持在数据网格视图的特定列内
我正在处理windows窗体应用程序 我有这样一个数据网格视图: 在这里,我在司机id栏中,我必须输入司机id。一旦我输入了司机id,我将按下回车按钮。同时,使用release按钮将光标移动到下一列,但我不想自动将光标移动到下一列,我希望将光标始终保持在driver id列中C# 将光标保持在数据网格视图的特定列内,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在处理windows窗体应用程序 我有这样一个数据网格视图: 在这里,我在司机id栏中,我必须输入司机id。一旦我输入了司机id,我将按下回车按钮。同时,使用release按钮将光标移动到下一列,但我不想自动将光标移动到下一列,我希望将光标始终保持在driver id列中 如何实现这一点?我创建了一个简单的示例,这样您就可以了解如何使用ProcessCmdKey事件并防止焦点光标指向其他列。我已经创建了自定义的datagridviewcontrol(MyGrid)并将该控件放置在我的win
如何实现这一点?我创建了一个简单的示例,这样您就可以了解如何使用ProcessCmdKey事件并防止焦点光标指向其他列。我已经创建了自定义的datagridviewcontrol(MyGrid)并将该控件放置在我的windows窗体中
//Code added in form load.
MyGrid1.KeepCursorColumnIndex = 2; //I want to keep focus on column index 2
//MyGrid custom grid class
public partial class MyGrid : DataGridView
{
private int _freezCursorColumnIndex = -1;
public int KeepCursorColumnIndex
{
get
{
return _freezCursorColumnIndex;
}
set
{
_freezCursorColumnIndex = value;
}
}
public MyGrid()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (_freezCursorColumnIndex > -1 && this.CurrentRow != null && keyData == Keys.Return)
{
this.CurrentCell = this.CurrentRow.Cells[KeepCursorColumnIndex];
keyData = Keys.None;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
上面的代码不是一个完整的示例。您需要在ProcessCmdKey代码中进行一些更改。例如,如果已将KeepCursorColumnIndex设置为3,且当前选定的列索引为1,则按enter键,光标将直接移动到索引3,而不是第2列。另一个,如果当前行索引为第一,则它将更改为第二(如果存在)。保持原样和用户datagridview单元格结束编辑事件如何
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name=="driverid")
{
dataGridView1.CurrentCell = dataGridView1.Rows[(e.RowIndex+1)].Cells["driverid"];
dataGridView1.BeginEdit(true);
}
}
由于我没有要测试的数据,这是否正常工作您需要在datagridview中处理processcmdkey事件。若要处理此事件,您必须创建datagridview控件继承的自定义datagirdview控件。先生,我创建了datagridview控件继承的自定义datagirdview控件,然后我将自定义datagirdview控件名称分配给我的数据网格视图。但此时我的数据网格视图不工作(不向我的数据网格视图提交数据)先生,我创建了新的自定义控件类名mycustomdgv..然后我在数据网格视图页面加载事件中编写了如下代码:this.DGVall=new mycustomdgv(),,但这次我的DGVall datagrid视图不工作,请不要将自定义datagridview控件指定给windows窗体上的datagirdview控件。直接将其放入windows窗体。因此,我想删除旧的数据网格视图并替换自定义数据网格视图?先生,这次在网格视图中,我只需编写此代码?MyGrid1.KeepCursorColumnIndex=2;此属性将以非自定义datagridview控件的形式设置。即使您可以在设计时从属性网格进行设置。不,先生,我仍然没有将焦点放在驱动程序id列上,那么您做错了什么,因为我已经在我的测试项目中完成了。在这个聊天室中粘贴你的完整代码如果用户按下
TAB'或arrow键而不是enter会发生什么?是的,我知道@GujjuDeveloper,但我添加了另一个解决方案,如果用户同意DataGridView的任何键,但如果用户按下arrow键,可能会出现错误