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

时间:2014-04-10 06:37:08

标签: c# winforms datagridview

我正在使用Windows窗体应用程序..

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

enter code here

这里我在驱动程序ID列中我必须输入驱动程序ID。输入驱动器ID后,我将按Enter键。同时光标使用释放按钮移动到下一列,但我不想自动将光标移动到那里,我想将光标始终保持在驱动程序ID列中。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

保持原样和用户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);

      }
    }

这是否有效我没有测试,因为我没有数据可以测试

答案 1 :(得分:2)

我创建了一个简单的示例,因此您可以了解如何使用ProcessCmdKey事件并防止焦点光标在其他列上。我创建了自定义 datagridviewcontrol(MyGrid)并将该控件放在我的窗体中。

//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,则另一个如果当前行索引为1st,则将更改为2nd存在。