2013-04-24 33 views
1

的索引我有一个DataGridView,我从一个视图填充在PostgreSQL的:在一个DataGridView选择一行,从数据源

dataSource = new BindingSource(); 
dgData.DataSource = dataSource; 
dataSource.DataSource = Program.DB.GetView(dbView, filter); 

Program.DB.GetView回报DataTable

时,我有一个行选择,我排序DataGridView,我的选择卡住在相同的指数。我希望选择留在选定的记录。

我试图获得第一列(这是数据库的主键),并使用它来引用视图中的一行,但我不知道如何正确地做到这一点。

if (dgData.SelectedRows.Count == 1) { 
    rowIdx = (int)dgData.SelectedRows[0].Cells[0].Value; 
    colName = dgData.Columns[0].Name; 
} 

现在,如何使用rowIdx到行的在DataGridViewSelected属性设置为true

回答

1

我建议的LINQ to让你的行,然后将选定的属性:

DataGridViewRow searchedRow = (from row in dgData.rows 
           where row.Cells[0].value == rowIdx 
           select row).FirstOrDefault(); 
if(searchedRow != null) 
    searchedRow.Selected = true; 

另一种解决方案来检索行(和λ):

searchedRow = dgData.rows.Cast<DataGridViewRow>() 
         .FirstOrDefault(row => row.Cells[0].value == rowIdx); 

或者,如果你不”你必须做任何事情,你可以去:

dgData.rows.Cast<DataGridViewRow>() 
      .FirstOrDefault(row => row.Cells[0].value == rowIdx) 
      .Selected = true 
+0

第二个解决方案似乎不工作。 'dgData.Rows'没有'FirstOrDefault'成员。 – 2013-04-25 10:21:54

+0

@BartFriederichs'Cast'调用是否有帮助? (是解决您的问题的第一个解决方案吗?) – 2013-04-25 11:16:39

+0

第一个解决方案解决了它。将接受。 – 2013-04-25 11:23:24

相关问题