for(i=0;i<10;i++)
{
<%# Eval(i.ToString()).ToString()%>
}
如果我不知道列名,如何使用 eval。(意味着如果数据表列是动态创建的)
- 我正在创建一个
DataTable
- 列
dt.Column.Add()
名将来自数据库 - 所以我不知道所有列名是什么。
- 现在我如何在 asp.net 页面中打印它。因为它 Eval 需要一些字符串常量;
<%# Eval("Column name").ToString()%>
GridView 会更适合于此,它会自动从数据源生成列。
但是,您可以遍历 的Columns
属性DataTable
并从每一列获取ColumnName
属性,但是您不能foreach
在数据绑定标记 ( <%# %>
) 内使用循环。
以下是在代码隐藏中获取列名的方法:
DataTable dt = new DataTable();
//populate data table
foreach (DataColumn col in dt.Columns)
{
string columnName = col.ColumnName;
}
您可以在转发器的项目模板中循环使用它,但是因为您没有使用<%# %>
丢失的数据绑定块 ( ),Container.DataItem
这使得渲染当前项目中的数据非常困难,如果不是不可能的话。
问题是...您确实知道即将到来的列名。您在第 2 步中说 dt.Column.Add() 字符串参数将来自数据库。所以这意味着一个单独的过程,您首先访问数据库并获取列名列表。
然后,您将遍历此列表并填充您的 Eval 函数(您添加的 FOR 语句实际上将遍历您的数据库列名列表,这些列名可能位于数组或列表或它们自己的数据表对象中)。
对于你的问题
在 * 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();
}