c#如何实现光标停在TEXT时可选择用上下方向键选择datagridview中的行
如题,在c#WINFORM中TEXT控件的下方有一datagridview控件,要实现当TEXT输入或更变更内容时,实时更新datagridview中的内容,datagr...
如题,在c# WINFORM中TEXT控件的下方有一datagridview控件,要实现当TEXT输入或更变更内容时,实时更新datagridview中的内容,datagridview中的数据已经绑定,且要光标永久在TEXT上闪同时,可以用上下方向键选择datagridview中的行, 谢
展开
1个回答
展开全部
例如你的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中的行
追答
上面的程序是我写的测试程序,应该已经符合你的要求,你可以拖两控件出来复制上面的代码测试下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询