C# 将光标保持在数据网格视图的特定列内

C# 将光标保持在数据网格视图的特定列内,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在处理windows窗体应用程序 我有这样一个数据网格视图: 在这里,我在司机id栏中,我必须输入司机id。一旦我输入了司机id,我将按下回车按钮。同时,使用release按钮将光标移动到下一列,但我不想自动将光标移动到下一列,我希望将光标始终保持在driver id列中 如何实现这一点?我创建了一个简单的示例,这样您就可以了解如何使用ProcessCmdKey事件并防止焦点光标指向其他列。我已经创建了自定义的datagridviewcontrol(MyGrid)并将该控件放置在我的win

我正在处理windows窗体应用程序

我有这样一个数据网格视图:

在这里,我在司机id栏中,我必须输入司机id。一旦我输入了司机id,我将按下回车按钮。同时,使用release按钮将光标移动到下一列,但我不想自动将光标移动到下一列,我希望将光标始终保持在driver id列中


如何实现这一点?

我创建了一个简单的示例,这样您就可以了解如何使用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键,可能会出现错误