2013-02-20 63 views
0

我需要做的是在加载到dgv中之前捕获数据并更改其中一个属性。我现在已经是一个通用的方法,我用创建DataSource我DGV:Windows窗体 - 如何获取DataGridView所填充的数据

dgv.DataSource = new SortableBindingList<T>(result.ResultEntities); 

我想要做的就是得到这个数据,操纵它,我需要的方式,然后返回在dgv中更改加载数据。

我试图通过简单地这样做是为了做到这一点:

SortableBindingList<MyType> someVar = (SortableBindingList<MyType>)dgvMydgv.DataSource; 

嗯,看来这不是做到这一点的方式。

+0

令我惊讶的是,看到这种winforms心态..为什么你不只是保持一个参考'SortableBindingList '?而不是做任何UI元素的'DataSource'属性的黑客攻击? – 2013-02-20 14:28:36

+0

因为我认为为任何目的获取网格数据并不奇怪,事实上这正是我想要做的。 – Leron 2013-02-20 14:34:52

+1

将winforms开发人员了解[UI不是数据](http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137)? – 2013-02-20 14:43:55

回答

1

如果将像sortableBindingList这样的局部变量绑定到datagridview,那么在datagrid数据绑定成功后就无法访问它。在“DataBound()”之后数据源将为NULL - 事件触发。

FYI:

如果您绑定SqlDataSource您的datagridview你能你绑定的数据源后,导出sortablebindinglist。

你拥有的每行中读出每列,并将其保存在一个新定义的sortablebindinglist,然后重新绑定数据源到GridView:

foreach (GridViewRow gvrMyRow in gvFields.Rows) 
{ 
    foreach (TableCell tcMyCell in gvrMyRow.Cells) 
    { 
     string sMyValue = tcMyCell.Text; 
    } 
} 

请记住:

保持参考原始填写的清单是正常的方式,你应该去实现这个目标。它更容易找到条目,操作条目等等。

+0

我仍然不明白这和保持对实际原始列表的引用之间的区别。 – 2013-02-20 14:58:26

+0

保持ref的原始列表是更好的方式和“正常的方式去”:)但他要求一种方式来读出现有的gridview行。 – noonecares 2013-02-20 15:00:58