【问题标题】:ASP.Net MVC - Dynamically Creating GridView and Binding Data to It in aspx fileASP.Net MVC - 在 aspx 文件中动态创建 GridView 并将数据绑定到它
【发布时间】:2017-03-14 07:19:31
【问题描述】:

我想根据返回的数据表动态创建 GridView 及其列。所以,我通过 ViewData 将数据表返回到 aspx 文件,并迭代数据表的列以创建一个 GridView 模板。然后,在 aspx 中使用 C# 将数据表绑定到 GridView。但是当我尝试在 aspx 文件中获取 GridView 时,会显示错误消息“当前上下文中不存在名称 XXX”。还有其他方法可以实现我想做的吗?

以下是我的源代码:

控制器

public ActionResult gridViewPage() {
    DataTable dt = runSqlQueryToReturnADataTable();
    ViewData["DT"] = dt;
    ViewData["DisplayMode"] = "Grid";
    return View();
}

ASPX 文件

<% if ("Grid".Equals(ViewData["DisplayMode"])) { %>
    <asp:GridView ID="gridViewForQuery" runat="server">
        <Columns>
            <% foreach (System.Data.DataColum col in (ViewData["DT"] as System.Data.DataTable).Columns) %>
                  <asp:BoundField DataField="<%: col.ColumnName %>"/>
        </Columns>
    </asp:GridView>

    <% gridViewForQuery.DataSource = (ViewData["DT"] as System.Data.DataTable); gridViewForQuery.DataBind(); %>
<% } %>

【问题讨论】:

  • 你可以直接设置datatable,设置GridView的AutoGeneratedColumn=True,它会自动创建Database有的列。

标签: c# asp.net asp.net-mvc gridview


【解决方案1】:

如果您定义网格依赖于任何条件,则无法从代码隐藏访问。

将 gridview 定义更改为此。

<% if ("Grid".Equals(ViewData["DisplayMode"])) {
   gridViewForQuery.DataSource = (ViewData["DT"] as System.Data.DataTable); gridViewForQuery.DataBind();
 }%>
<asp:GridView ShowHeaderWhenEmpty="false" AutoGenerateColumns="true" ID="gridViewForQuery" runat="server">

</asp:GridView>

【讨论】:

  • 感谢您的回复。您的解决方案确实解决了问题!但另一个问题出现了。错误消息“'GridView' 类型的控件 'gridViewForQuery' 必须放置在带有 runat=server 的表单标记内。”这是否意味着我只能在代码后面分配数据源和绑定数据?还有其他解决方案吗?谢谢!
  • 我更新了帖子。并检查它是否有 runat="server" 错误。 stackoverflow.com/a/21554229/4172872
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多