在我的代码背后说我有一个这样的数组:
public static string [] fields = new string [] {“field1”,“field2”,“field3”,“field4”};
我想使用这个数组在数据绑定时检索gridview中的字段,如下所示:
<%# Eval("Field1")%>
<%# Eval("Field2")%>
<%# Eval("Field3")%>
<%# Eval("Field4")%>
但是,我很难弄清楚如何迭代我的数组(字段)来生成上面的代码。它不想解析数据绑定服务器标记(&lt;%#%&gt;)中的任何运算符,如下所示:
<%# foreach (string field in fields)
{
Eval(field);
}
%>
我找不到在常规服务器标签中重现数据绑定行为的方法:
<% foreach (string field in fields)
{
Response.Write(DataBinder.Eval(object, field);
}
%>
databinder.eval方法接受一个容器对象,我不确定我可以在常规数据绑定标记之外访问它。我也尝试使用常规服务器标签来生成围绕数据绑定代码的迭代代码,但它无法访问迭代的变量。
修改
我应该更清楚,最后我希望值最终会出现在我的页面上,而不是字段名称本身。我的数据库可能类似于:
Field1 | Field2 | Field3 | Field4
| | |
value1 | value2 | value3 | value4
什么时候说完了,我的页面应该是这样的:
value1
value2
value3
value4
但是fields数组是动态的,并且可能因对象而异,因此静态访问数组中的每个索引都不起作用。
答案 0 :(得分:1)
基于编辑:
<强>标记:强>
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<%# GetIndexedItem(DataBinder.Eval(Container.DataItem)) %>
<!--or--->
<%# GetIndexedItem(DataBinder.Eval(Container.DataItem), 0) %>
<%# GetIndexedItem(DataBinder.Eval(Container.DataItem), 1) %>
<%# GetIndexedItem(DataBinder.Eval(Container.DataItem), 2) %>
</ItemTemplate>
</asp:Repeater>
<强>代码隐藏:强>
void Page_Load(Object Sender, EventArgs e) {
if (!IsPostBack)
{
Repeater1.DataSource = fields ;
Repeater1.DataBind();
}
}
protected string GetIndexedItem(object obj, int idx)
{
//add some array bounds checking..etc
//if you need to loop through the array and return something
//you can do that here instead of getting by index
return obj[idx].ToString();
}
protected string GetIndexedItem(object obj)
{
StringBuilder sb = new StringBuilder();
string[] lst = (string[])obj;
for(int i=0;i<lst.Length; i++)
{
//something like this
sb.Append(lst[i].ToString() + "<br>" )
}
return sb.ToString() ;
}
答案 1 :(得分:1)
我已经找到了一个解决方案,我已经根据我到目前为止的回复进行了修补。
诀窍是将容器实例传递给静态方法,以便我可以进行迭代。原始数据绑定服务器控件(&lt;%#%&gt;)不允许运算符,但您可以简单地将容器传递给静态方法来执行此操作。
<强>标记:强>
<%# GetItems(Container) %>
代码背后:
protected static string GetItems(IDataItemContainer container)
{
StringBuilder sb = new StringBuilder();
string[] StaticSQLFields = MyStaticClass.StaticSQLFields;
for (int i = 0; i < StaticSQLFields.Length; i++)
{
sb.Append(DataBinder.Eval(container.DataItem, StaticSQLFields[i]) + "<br>");
}
return sb.ToString();
}