阻止DataGridView选择第一个项目

时间:2009-07-09 15:50:05

标签: .net winforms datagridview

我有一个WinForm DataGridView,当我用数据填充它时,默认选择第一个项目。我不希望在选择一个项目时触发事件并执行某些代码。我对此的解决方案是取消挂钩绑定事件,或者在新数据绑定后第一次触发事件时更改标志。但是我想知道是否有更优雅的东西。

5 个答案:

答案 0 :(得分:2)

我没有打开winforms应用程序进行测试,但是我很好奇你的数据和datagridview之间是否有介入的BindingSource?如果是这样,如果你设置

怎么办?
List<Data> data = GetMyData();
BindingSource myBindingSource = new BindingSource();
myBindingSource.DataSource = data;
myBindingSource.position = -1;
myGrid.DataSource = myBindingSource;

我经常发现在数据和UI之间插入BindingSource对象很有帮助。它似乎有助于解决许多随机​​问题,虽然我更习惯于将DataTable对象用作数据而不是List&lt;&gt;对象。

答案 1 :(得分:2)

怎么样(对不起,VB.NET,但我相信你可以转换):

myGrid.ClearSelection()

答案 2 :(得分:2)

我遇到了类似的问题(但我没有使用SelectionChanged事件),这对我有用:

在构造函数中,设置绑定后,向DataBindingComplete事件添加处理程序:

dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete);

处理程序:

void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dgvCommandos.ClearSelection();
}

如果您打算选择一行(例如,在添加/插入新对象之后),只需设置:

dgvCommandos.Rows[insertPos].Selected = true;

以此为基础,我认为可以处理其他事件以响应用户选择。希望这会有所帮助。

答案 3 :(得分:0)

使用类似以下示例的内容:

        dataGridView.Columns[0].Selected = false;
        dataGridView.Rows[0].Selected = false;
        dataGridView.Rows[0].Cells[0].Selected = false;

当然,检查是否有行,列等。这只是一个例子。

答案 4 :(得分:0)

很晚了,但我唯一能让它为我工作的方式(很多TextBoxes,ComboBox等等通过BindingSource绑定到我的DataGridView):

将DataBindings初始化为我的控件并将数据加载到DataGridView后,我不得不暂停绑定

bindingSource.SuspendBinding();

在我的RowHeaderMouseClick事件中,我检查了绑定是否被挂起。如果是这样,请恢复它:

if(bindingSource.IsBindingSuspended)
    bindingSource.ResumeBinding();

这样我就可以完成数据的加载和绑定(在我的例子中是一个可排序的BindingList),向用户显示数据但没有选择记录。

希望这对至少任何人都有帮助!