我有一个使用dataGridView的Winform应用程序。我想要做的是当用户点击单元格时,它会将单元格内容显示到文本框中。以下是我处理click事件的代码:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
textBox1.Text = row.Cells["Name"].Value.ToString();
}
}
在Windows 7中一切正常。但是,当我在Windows XP下运行它时,存在一个问题。
我将用一个简单的例子解释这个问题。我用一个按钮向dataGridView添加一些数据:
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Add("John","123");
dataGridView1.Rows.Add("Rob","456");
}
因此,如果您点击第一行,文本框将显示" John&#34 ;;如果你点击第二行,它将是" Rob"。这在Windows 7下工作正常,如果你执行点击有一些延迟(如1秒),它也可以在Windows XP下正常工作。但是,如果您执行快速点击,例如在第一行和第二行之间的一秒钟内进行5到6次,很长一段时间,文本框将显示" Rob"即使你点击第一行,或其他方式。它根据行没有显示正确的数据。
我已尝试在每次单击之间启用禁用dataGridView /刷新dataGridView,但它们都不起作用。唯一有效的是延迟鼠标点击:点击后移动光标位置或显示消息框,它们只是解决方法,但不是真正的解决方案。
以前有过这样的经历吗?这是一个Windows XP" bug"?顺便说一句,我的开发环境是带有VS2010的Window 7。感谢您提前提供任何帮助。
答案 0 :(得分:0)
尝试在执行任务之前添加检查。尝试这样的事情:
if (e.RowIndex >= 0 && this.dataGridView1.SelectedCells[0].RowIndex == e.RowIndex)
{
DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
textBox1.Text = row.Cells["Name"].Value.ToString();
}
答案 1 :(得分:0)
我找到了一个解决方案:
我正在使用Cell Click事件处理选择,它应该可以工作,但不确定为什么它在Windows XP下无法运行。
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)'
with handle
'this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick);
然后我将选择方式改为selectionchange,它在Windows 7和Windows 7中都能正常工作。 XP。
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
this.dataGridView1.SelectionChanged += new System.EventHandler(dataGridView1_SelectionChanged);