【问题标题】:Dynamically add columns to Gridview using different datasource than what is bound使用与绑定不同的数据源将列动态添加到 Gridview
【发布时间】:2010-09-08 17:05:51
【问题描述】:

告诉我这是否可能:

我有一个绑定到 ObjectDataSource 的 gridview,为我提供来自数据库的数据。我正在使用 Linq-to-entities 填充 Objectdatasource。我提供列和行的典型设置。

下面我有一个可怕的图形表示。


       x_col    x_col   x_col   
x_row| x_data   x_data  x_data    
x_row| x_data   x_data  x_data  
x_row| x_data   x_data  x_data  
x_row| x_data   x_data  x_data    
x_row| x_data   x_data  x_data   

我想做的是从数据库中的另一个表向这个gridview添加列:原始数据是x;不同的数据是 y。


       x_col    x_col   x_col   y_col   y_col   y_col 
x_row| x_data   x_data  x_data  y_data  y_data  y_data
x_row| x_data   x_data  x_data  y_data  y_data  y_data
x_row| x_data   x_data  x_data  y_data  y_data  y_data
x_row| x_data   x_data  x_data  y_data  y_data  y_data  
x_row| x_data   x_data  x_data  y_data  y_data  y_data 

直到运行时我才知道任何 y 信息,因此它是动态添加的。我不需要将 x 更新回数据库,但我确实需要更新 y。

数据源好像只能有一次select方法,不知道怎么办。

我希望我在这里不要太抽象。

【问题讨论】:

    标签: c# asp.net entity-framework objectdatasource


    【解决方案1】:

    简短的回答是肯定的,您可以动态更改/重新生成 GridView 的列。最简单的方法是在 DataBinding 之前以编程方式定义 DataSource。 DataSource 可以是几乎任何对象的 IEnumerable,允许您创建自定义 GridRow 对象,该对象以您希望查看的形式保存数据。

    这是我要做的,在高层次上:

    • 从标记中的 GridView 中删除静态列定义,并将 GridView 本身的属性 AutoGenerateColumns 设置为 true。这将导致 GridView 根据用作 DataSource 的对象在 DataBinding 上创建列。

    • 创建一个简单的 POCO 类来表示您要显示的每组数据。如果不同列排列的数量会很大,或者在编译时无法知道,那么将数据拉取或推送到 DataTable 中可能是值得的。

    • 准备结果时,将数据传输到适用的 POCO 类的列表或数据表中。将此List或DataTable设置为DataSource,调用DataBind()

    • 可以以编程方式指定自定义标签;系统将默认为其 DataSource 对象的字段、属性或列名称的 ToString() 表示。您可以通过将处理程序附加到 GridView 的 OnDataBinding 事件或在调用 DataBind() 后更改列名来覆盖此行为。

    或者,您可以选择不自动创建列,但仍会在页面加载或 PreRender 时动态创建。这将允许您自己控制所有细节,而无需依赖默认值。您可以使用它来创建各种动态网格,这些网格都将映射到同一数据对象的字段,从而在一定程度上减少您的类数。

    动态网格创建对于诸如搜索页面之类的东西很有用,您可能希望从众多记录中查找一种类型,但不希望为您能够搜索的所有内容都提供预定义的 GridView ,也不必对搜索结果进行规范化,以便它们都适合类似的网格。

    【讨论】:

    • 感谢您的回复!你有没有找到任何我可以看看的例子?
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多