我有一个带有DataSource的DataGridView。 DataGridView为每个属性自动生成列。我想更改它,以便以不同的方式获取列的数据。
如何确定DataGridView如何从数据源中的项中获取列和值?
答案 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。