0
for(i=0;i<10;i++)
{
    <%# Eval(i.ToString()).ToString()%>
}

如果我不知道列名,如何使用 eval。(意味着如果数据表列是动态创建的)

  1. 我正在创建一个DataTable
  2. dt.Column.Add()名将来自数据库
  3. 所以我不知道所有列名是什么。
  4. 现在我如何在 asp.net 页面中打印它。因为它 Eval 需要一些字符串常量;<%# Eval("Column name").ToString()%>
4

3 回答 3

1

GridView 会更适合于此,它会自动从数据源生成列。

但是,您可以遍历 的Columns属性DataTable并从每一列获取ColumnName属性,但是您不能foreach在数据绑定标记 ( <%# %>) 内使用循环。

以下是在代码隐藏中获取列名的方法:

DataTable dt = new DataTable();

//populate data table

foreach (DataColumn col in dt.Columns)
{
    string columnName = col.ColumnName;
}

您可以在转发器的项目模板中循环使用它,但是因为您没有使用<%# %>丢失的数据绑定块 ( ),Container.DataItem这使得渲染当前项目中的数据非常困难,如果不是不可能的话。

于 2013-02-07T12:18:32.270 回答
0

问题是...您确实知道即将到来的列名。您在第 2 步中说 dt.Column.Add() 字符串参数将来自数据库。所以这意味着一个单独的过程,您首先访问数据库并获取列名列表。

然后,您将遍历此列表并填充您的 Eval 函数(您添加的 FOR 语句实际上将遍历您的数据库列名列表,这些列名可能位于数组或列表或它们自己的数据表对象中)。

于 2013-02-07T12:10:03.797 回答
0

对于你的问题

在 * ASP.NET *

<asp:Repeater ID="rptrTester" OnItemDataBound="rptrTester_ItemDataBound" runat="server">
    <ItemTemplate>
        <asp:Repeater ID="rptrTesterInner" runat="server">
            <ItemTemplate>
                <%# Eval("COL_NAME")%>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

在 C# 背后的代码中

System.Data.DataTable dt = null;
    private void GetData()
    {
        System.Data.DataTable dtMain = // MyDAta Table;
        dt = new System.Data.DataTable();
        dt.Columns.Add("COL_NAME");
        System.Data.DataRow dr = null;
        for (int i = 0; i < dtMain.Columns.Count; i++)
        {
            dr = dt.NewRow();
            dr[0] = dtMain.Columns[0].ColumnName;
            dt.Rows.Add(dr);
        }
        rptrTester.DataSource = dtMain;
        rptrTester.DataBind();
    }
    protected void rptrTester_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Repeater rptrTesterInner = (Repeater)e.Item.FindControl("rptrTesterInner");
        rptrTesterInner.DataSource = dt;
        rptrTesterInner.DataBind();
    }
于 2013-02-07T12:40:19.980 回答