所以基本上第一行中的第一列总是被选中,我无法找到一种方法来获得它,因此gridview没有选定的单元格。有什么帮助吗?
答案 0 :(得分:24)
我自己遇到了很多麻烦。我有一个用户控件,其中包含一个DataGridView,它在应用程序/表单加载时填充。在数据绑定完成并且填充/呈现网格之后,第一行的选择似乎发生。用户控件加载事件(也可能是表单加载)在此之前触发 - 因此在这些加载事件中调用gridView.ClearSelection()或使gridView.CurrentCell无效没有净效果。
最终对我有用的是从 DataGridView 本身的 DataBindingComplete 事件中调用.ClearSelection()。这就像一个魅力。
答案 1 :(得分:18)
我有同样的问题,没有任何工作。对我有用的解决方案是将'Tabstop'属性设置为False并在数据绑定后立即调用ClearSelection()方法。
答案 2 :(得分:3)
数据绑定DGV后,将DGV的CurrentCell
属性设置为null:
dataGridView1.CurrentCell = null;
请注意,这样做不会阻止与行和单元格选择相关的DGV事件触发;您必须在RowEnter事件上添加选定的行或单元格计数检查,如下所示:
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
if (dataGridView1.SelectedRows.Count == 1) {
// Do stuff since a row is actually selected ...
}
}
答案 3 :(得分:1)
你应该在事件之后调用:ClearSelection:DataBindingComplete
答案 4 :(得分:0)
绑定数据后只需调用
dataGridView.ClearSelection();
我认为您在将数据设置到dataGrindView之前尝试调用它,如果您曾尝试过它
答案 5 :(得分:0)
如果我理解Q.这可以防止在数据绑定后显示选中的单元格。 所以背面颜色保持白色。您也可以编辑列并将其设置在那里。
DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor;
答案 6 :(得分:0)
我还想要只读DataGridView,在我的例子中,一个单独的线程正在慢慢获取数据并通过多线程列表和Form计时器将其交给GUI线程。在这种方法中,GUI线程根据需要扩展数据网格,同时允许浏览。
根据上面的建议,可以隐藏选择,但是当我的GUI线程使用选择调用dataGridView.Rows.Add()时,没有一个可以阻止单元格被重置。这包括挂钩事件以阻止选择,以及禁用编辑模式。
我找到了我想要的行为
dataGridView.AllowUserToAddRows = false;
现在我有一个动态大小,异步加载的数据网格是只读的。
我不喜欢BackgroundWorker解决方案,因为进度对我的加载代码来说是一个很大的负担。我也不喜欢每次刷新网格时重建新DataTable的要求。我找不到任何关于使用正在构建的DataTable刷新DataGridView的提示,但看起来这应该是可能的。
答案 7 :(得分:0)
确保您没有调用方法从表单构造函数加载数据。如果你从form.load()
调用它在加载datagridview之后也执行此操作
DataGridView.Rows[0].Selected = false;
答案 8 :(得分:0)
在我的情况下我遇到了同样的问题,而不是将第一行可见性设置为false。最好设置GridColor值以避免 SelectionChanged事件的风险。
将dgv.ClearSelection()放在 DataBindingComplete事件上,并将GridColor设置为DataGridView BackColor。
在填充方法/触发事件中将GridColor设置为可见颜色(例如:灰色)。
答案 9 :(得分:0)
大多数情况下,它是由一个小错误引起的,也许在组框上设置了datagridview
。如果有更多组框,则选择将在第一个组框上停止,因此请按优先级保留组框。
答案 10 :(得分:-1)
我遇到了同样的问题并通过覆盖GridView的OnPropertyChanged事件解决了这个问题
{{1}}
答案 11 :(得分:-1)
Event _MasterRowExpanded(object sender, CustomMasterRowEventArgs e)
GridView gv = (sender as GridView).GetDetailView(e.RowHandle, e.RelationIndex) as
GridView;
gv.ClearSelection();