【发布时间】:2011-05-11 07:47:29
【问题描述】:
当我逐行填充 DataGridView 时(调用它的 add 函数),顶行变为蓝色。 它没有被选中,因为我也尝试过 ClearSelection() 但它没有用。 选择第一行会产生错误的错觉。
如何摆脱它?
void FillDGV()
{
dataGridViewParties.Rows.Clear();
for (int i = 0; i < dataGridViewParties.Columns.Count; i++)
{
dataGridViewParties.Columns[i].Width = this.Width / dataGridViewParties.Columns.Count;
}
DataTable partyTbl = UtilityClass.GetDataTable(@"SELECT [PartyID]
,[PartyName]
,[PartyAddress]
,[PartyState]
,[PartyCity]
,[PartyPhone]
FROM [VegiManager].[dbo].[Parties]
WHERE [PartyName] LIKE '" + textBoxPartySearch.Text + "%' ");
foreach (DataRow dr in partyTbl.Rows)
{
dataGridViewParties.Rows.Add(1);
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[0].Value = dr["PartyID"].ToString();
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[1].Value = dr["PartyName"].ToString();
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[2].Value = dr["PartyAddress"].ToString();
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[3].Value = dr["PartyState"].ToString();
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[4].Value = dr["PartyCity"].ToString();
dataGridViewParties.Rows[dataGridViewParties.Rows.Count - 1].Cells[5].Value = dr["PartyPhone"].ToString();
}
if (dataGridViewParties.Rows.Count > 0)
{
dataGridViewParties.ClearSelection();
dataGridViewParties.CurrentCell = null;
}
}
在调试器中,我发现在 DataGridViewParties.CurrentCell = null; 之前 CurrentCell 已经为 null;执行。
这个问题http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/c440c4f6-6dfc-47b6-97c0-1ce49c105b64/也和它有关,但没有提供解决方案。
编辑:它很奇怪,但它适用于 Load 事件,我是在构造函数中做的。 我希望当第一行被选中并且用户按下向上箭头键时,焦点移动到某个文本框。但在这种情况下它不起作用(第一行显示为蓝色)
private void dataGridViewInwards_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up && dataGridViewParties.SelectedRows.Count > 0 && dataGridViewParties.SelectedRows[0].Index == 0)
{
textBoxPartySearch.Focus();
dataGridViewParties.ClearSelection();
dataGridViewParties.CurrentCell = null;
}
else if (e.KeyCode == Keys.Up && dataGridViewParties.SelectedRows.Count == 0)
{
textBoxPartySearch.Focus();
}
}
【问题讨论】:
-
可能没有选中,但可能是焦点行
-
我刚查了一下,发现一个文本框有焦点。
-
我尝试了 dataGridView.ClearSelection() 并且工作正常。可以分享一下代码吗?
标签: c# .net winforms datagridview