繁体   English   中英

使用C#按键移动DataGridView选定单元格/行的上/下键

[英]Move DataGridView Selected Cell/Row Up/Down On Keys Press Using C#

我的表单中有一个datagridview1 ,其中包含一列和无限制的行,使用以下代码隐藏其标题...

dataGridView1.RowHeadersVisible = false;   // Hide Row Header
dataGridView1.ColumnHeadersVisible = false; // Hide Column Header

因此,现在当我们专注于此时,第一行已被选中并突出显示。 现在在这里,我想使用键盘的UP和DOWN键使用下面的KeyDown函数上下移动选择,当我按ENTER键时,选择单元格值应转到类级别变量,默认情况下,第一个焦点行/单元格值应设置为类级变量也...

private void datagridview1_KeyDown(object sender, KeyEventArgs e)
{
   if (dataGridView1.Visible == true)
   {
       if (e.KeyCode.Equals(Keys.Up))
       {
           MessageBox.Show("Move UP Row/Cell And Select It");
       }
       if (e.KeyCode.Equals(Keys.Down))
       {
           MessageBox.Show("Move Down Row/Cell And Select It");
       }
       if (e.KeyCode.Equals(Keys.Enter))
       {
           MessageBox.Show("Send Selected Cell Value To Class Level Variable");
       }
       e.Handled = true;
    }
 }

目前,我有一些包含datagridview CELL值的类级别变量,我正在使用下面的代码获取CellClick但是我想使用上层代码对键进行此功能...

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    value = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
}

我的班级变量就像...

public partial class Form1: Form
{
    string value = "";
    public MainForm()
    {
        InitializeComponent();
    }
}

那么我该如何使用C#... ???

更新:

对于上/下选择,我使用了以下代码及其工作方式。 所以现在如何按ENTER键将所选单元格值发送到类级别变量... ???

private void selectUpRow()
{
    DataGridView dgv = dataGridView1;
    int totalRows = dgv.Rows.Count;
    int rowIndex = dgv.SelectedCells[0].OwningRow.Index;
    if (rowIndex == 0)
        return;
    int colIndex = dgv.SelectedCells[0].OwningColumn.Index;
    DataGridViewRow selectedRow = dgv.Rows[rowIndex];
    dgv.ClearSelection();
    dgv.Rows[rowIndex - 1].Cells[colIndex].Selected = true;
}

private void selectDownRow()
{
    DataGridView dgv = dataGridView1;
    int totalRows = dgv.Rows.Count;
    int rowIndex = dgv.SelectedCells[0].OwningRow.Index;
    if (rowIndex == totalRows - 1)
        return;
    int colIndex = dgv.SelectedCells[0].OwningColumn.Index;
    DataGridViewRow selectedRow = dgv.Rows[rowIndex];
    dgv.ClearSelection();
    dgv.Rows[rowIndex + 1].Cells[colIndex].Selected = true;
}

所以最后我通过尝试Bla Bla Bla使其工作。 这是代码的简短答案...

public partial class Form1 : Form
    {
        string value = "";
        public MainForm()
        {
            InitializeComponent();
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (dataGridView1.Visible == true)
            {
                if (e.KeyCode.Equals(Keys.Up))
                {
                    selectUpRow();
                }
                if (e.KeyCode.Equals(Keys.Down))
                {
                    selectDownRow();
                }
                if (e.KeyCode.Equals(Keys.Enter))
                {
                    selectCellValue();
                }
                e.Handled = true;
            }
        }

        private void selectUpRow()
        {
            DataGridView dgv = dataGridView1;
            int totalRows = dgv.Rows.Count;
            int rowIndex = dgv.SelectedCells[0].OwningRow.Index;
            if (rowIndex == 0)
                return;
            int colIndex = dgv.SelectedCells[0].OwningColumn.Index;
            DataGridViewRow selectedRow = dgv.Rows[rowIndex];
            dgv.ClearSelection();
            dgv.Rows[rowIndex - 1].Cells[colIndex].Selected = true;
        }

        private void selectDownRow()
        {
            DataGridView dgv = dataGridView1;
            int totalRows = dgv.Rows.Count;
            int rowIndex = dgv.SelectedCells[0].OwningRow.Index;
            if (rowIndex == totalRows - 1)
                return;
            int colIndex = dgv.SelectedCells[0].OwningColumn.Index;
            DataGridViewRow selectedRow = dgv.Rows[rowIndex];
            dgv.ClearSelection();
            dgv.Rows[rowIndex + 1].Cells[colIndex].Selected = true;
        }

        private void selectCellValue()
        {
            int rowIndex = dataGridView1.SelectedCells[0].OwningRow.Index;
            value = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString();
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM