如何动态使用eval()

时间:2013-02-07 10:58:48

标签: c# asp.net

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()%>

3 个答案:

答案 0 :(得分:1)

GridView更适合这种情况,它会自动从数据源生成列。

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

以下是如何获取代码隐藏中的列名:

<%# %>

您可以在转发器项目模板的循环中使用它,但是因为您没有使用数据绑定块(DataTable dt = new DataTable(); //populate data table foreach (DataColumn col in dt.Columns) { string columnName = col.ColumnName; } ),您将失去<%# %>,这使得它非常困难,如果不是不可能的话,从当前项目中渲染出数据。

答案 1 :(得分:0)

事情是......你知道列名是什么。您在步骤2中说dt.Column.Add()字符串参数将来自数据库。这意味着一个单独的过程,您首先进入数据库并获取列名列表。

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

答案 2 :(得分: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();
    }