c#如何实现光标停在TEXT时可选择用上下方向键选择datagridview中的行

如题,在c#WINFORM中TEXT控件的下方有一datagridview控件,要实现当TEXT输入或更变更内容时,实时更新datagridview中的内容,datagr... 如题,在c# WINFORM中TEXT控件的下方有一datagridview控件,要实现当TEXT输入或更变更内容时,实时更新datagridview中的内容,datagridview中的数据已经绑定,且要光标永久在TEXT上闪同时,可以用上下方向键选择datagridview中的行, 谢 展开
 我来答
linsloony
2014-02-15 · TA获得超过362个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:282万
展开全部

例如你的dataGridView绑定了一个DataTable:

            DataTable dt = new DataTable();
            dt.Columns.Add("col1");
            for (int i = 100; i < 1000; i++)
            {
                dt.Rows.Add(i.ToString());
            }
            this.dataGridView1.DataSource = dt;

则一般在TextBox的TextChanged事件中添加下面代码:

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            DataTable dt = this.dataGridView1.DataSource as DataTable;
            if (dt != null)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text))
                    dt.DefaultView.RowFilter = string.Empty;
                else
                    dt.DefaultView.RowFilter = string.Format("col1 like '%{0}%'", this.textBox1.Text.Replace("'", "''"));
            }
        }

而你的光标本身在textbox上,所以可以在textbox的KeyDown事件中控制焦点行:

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
            {
                e.Handled = true;
                if (this.dataGridView1.CurrentCell == null)
                {
                    if (this.dataGridView1.Rows.Count > 0 && this.dataGridView1.Columns.GetColumnCount(DataGridViewElementStates.Visible) > 0)
                    {
                        this.dataGridView1.CurrentCell = this.dataGridView1.Rows[0].Cells[this.dataGridView1.Columns.GetFirstColumn(DataGridViewElementStates.Visible).Index];
                    }
                }
                else
                {
                    DataGridViewCell cell = this.dataGridView1.CurrentCell;
                    int iIndex = -1;
                    if (e.KeyCode == Keys.Up)
                        iIndex = this.dataGridView1.Rows.GetPreviousRow(cell.RowIndex, DataGridViewElementStates.Visible);
                    else
                        iIndex = this.dataGridView1.Rows.GetNextRow(cell.RowIndex, DataGridViewElementStates.Visible);
                    if (iIndex >= 0)
                    {
                        this.dataGridView1.CurrentCell = this.dataGridView1.Rows[iIndex].Cells[cell.ColumnIndex];
                    }
                }
            }
        }

欢迎追问。

追问
谢谢你的回答。关键是要光标在TEXT上闪的同时,可以用上下方向键选择datagridview中的行
追答
上面的程序是我写的测试程序,应该已经符合你的要求,你可以拖两控件出来复制上面的代码测试下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式