C# Windows窗体-如何获取填充DataGridView的数据

C# Windows窗体-如何获取填充DataGridView的数据,c#,.net,winforms,visual-studio-2010,C#,.net,Winforms,Visual Studio 2010,我需要做的是在加载到dgv之前捕获数据并更改其中一个属性。我现在使用的是一种通用方法,用于为我的dgv创建数据源: dgv.DataSource = new SortableBindingList<T>(result.ResultEntities); 好吧,看来这不是办法 如果将局部变量(如sortableBindingList)绑定到datagridview,则在datagrid数据绑定成功后,将无法访问该变量。触发“DataBound()”-事件后,数据源将为NULL 供参考:

我需要做的是在加载到dgv之前捕获数据并更改其中一个属性。我现在使用的是一种通用方法,用于为我的dgv创建
数据源

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

好吧,看来这不是办法

如果将局部变量(如sortableBindingList)绑定到datagridview,则在datagrid数据绑定成功后,将无法访问该变量。触发“DataBound()”-事件后,数据源将为NULL

供参考:

如果将
SqlDataSource
绑定到datagridview,则可以在绑定数据源后导出sortablebindinglist

您必须读取每行中的每一列,并将其保存在新定义的sortablebindinglist中,然后将数据源重新绑定到gridview:

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


保持对原始已填充列表的引用是正常的方法,您应该通过这种方法来实现。它可以更容易地找到条目、操作条目等等。

看到这种winforms心态,我感到非常惊讶。。为什么不在某个地方保留对
sortablebindingslist
的引用呢??与其做必须强制转换任何UI元素的
DataSource
属性的恶作剧?因为我认为出于任何目的获取网格数据并不奇怪,事实上这正是我想要做的。winforms开发人员会明白吗,我更新了链接提供的答案。我仍然不明白这与保留对实际原始列表的引用之间有什么区别。保留对原始列表的引用更好,而且是“正常方式”:)但他要求提供一种读取现有gridview行的方法。
foreach (GridViewRow gvrMyRow in gvFields.Rows)
{
     foreach (TableCell tcMyCell in gvrMyRow.Cells)
     {
         string sMyValue = tcMyCell.Text;
     }
}