for(i=0;i<10;i++)
{
<%# Eval(i.ToString()).ToString()%>
}
如果我不知道列名,我该如何使用eval。 (表示数据表列是否动态创建)
DataTable
dt.Column.Add()
列名称将来自数据库<%# Eval("Column name").ToString()%>
答案 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();
}