从属性以外的地方获取DataGridView的数据

时间:2011-08-05 15:09:55

标签: c# winforms datagridview

我有一个带有DataSource的DataGridView。 DataGridView为每个属性自动生成列。我想更改它,以便以不同的方式获取列的数据。

如何确定DataGridView如何从数据源中的项中获取列和值?

3 个答案:

答案 0 :(得分:1)

它可能使用反射,你真的要拦截和修改那种行为吗?

通常当默认的自动列生成不够时,我禁用它并从代码中静态创建列或者解析配置文件,之后可以扩展配置文件,以便在没有重建整个项目的情况下获得新列或不同渲染的列。 / p>

答案 1 :(得分:1)

我想这一切都取决于你想要做什么。如果您只想绑定到特定列,而不是根据DataSource对象中的属性自动生成列,那么您将执行以下操作:

 <asp:GridView ID="GridViewID" AutoGenerateColumns="false" runat="server">
    <Columns>
        <asp:BoundField DataField="Id" HeaderText="Id" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
    </Columns>
 </asp:GridView>

将“AutoGenerateColumns”设置为false并设置特定列时,GridView将仅绑定到“DataSource”对象中的属性,这些属性在指定列的“DataField”属性中标记。

现在,如果您要更改这些数据值,或者在绑定数据时专门修改数据,那么您需要附加到“RowDataBound”事件。这样,当绑定数据时,您可以在附加到每一行时对其进行更改。

答案 2 :(得分:0)

使用DataGridView.VirtualMode属性,您可以提供自己的数据存储:

  

虚拟模式设计用于非常大的数据存储。什么时候   VirtualMode属性为true,您使用set创建DataGridView   行数和列数,然后处理CellValueNeeded事件   填充单元格。虚拟模式需要实现   底层数据缓存,用于处理填充,编辑和删除   DataGridView单元格基于用户的操作。更多   有关实施虚拟模式的信息,请参阅How to: Implement Virtual Mode in the Windows Forms DataGridView Control