C# ASP.NET中继器和DataBinder.Eval
我的网页中有一个C# ASP.NET中继器和DataBinder.Eval,c#,.net,asp.net,data-binding,repeater,C#,.net,Asp.net,Data Binding,Repeater,我的网页中有一个,它绑定到一个通过编程创建的数据集 此转发器的用途是从A-Z创建索引,单击该索引时,刷新页面上的信息 中继器有一个链接按钮,如下所示: <asp:LinkButton ID="indexLetter" Text='<%#DataBinder.Eval(Container.DataItem,"letter")%>' runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "csscl
,它绑定到一个通过编程创建的数据集
此转发器的用途是从A-Z创建索引,单击该索引时,刷新页面上的信息
中继器有一个链接按钮,如下所示:
<asp:LinkButton ID="indexLetter" Text='<%#DataBinder.Eval(Container.DataItem,"letter")%>'
runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "cssclass")%>'
Enabled='<%#DataBinder.Eval(Container.DataItem,"enabled")%>'></asp:LinkButton>
数据集的创建方式如下:
protected DataSet getIndex(String index)
{
DataSet ds = new DataSet();
ds.Tables.Add("index");
ds.Tables["index"].Columns.Add("letter");
ds.Tables["index"].Columns.Add("cssclass");
ds.Tables["index"].Columns.Add("enabled");
char alphaStart = Char.Parse("A");
char alphaEnd = Char.Parse("Z");
for (char i = alphaStart; i <= alphaEnd; i++)
{
String cssclass="", enabled="true";
if (index == i.ToString())
{
cssclass = "selected";
enabled = "false";
}
ds.Tables["index"].Rows.Add(new Object[3] {i.ToString(),cssclass,enabled });
}
return ds;
}
受保护的数据集getIndex(字符串索引)
{
数据集ds=新数据集();
添加(“索引”);
表[“索引”]。列。添加(“字母”);
ds.Tables[“index”].Columns.Add(“cssclass”);
ds.Tables[“index”].Columns.Add(“enabled”);
char alphaStart=char.Parse(“A”);
char alphaEnd=char.Parse(“Z”);
对于(char i=alphaStart;i我不知道这是否会有任何区别,但尝试以下内容(注意间距)
根据您给出的示例,您不需要数据集,只需要datatable。此外,您没有指定列的数据类型
DataTable indexTable = new DataTable();
indexTable.Columns.Add("letter", typeof(string));
//do stuff
_repeater.DataSource = indexTable;
_repeater.DataBind();
然后像这样评估
Text='<%# Eval("letter")%>'
Text=''
不要破坏练习,但硬编码有什么问题:
<a href="Page.aspx?LIndex=A">A</a>
<a href="Page.aspx?LIndex=B">B</a>
<a href="Page.aspx?LIndex=C">C</a>
...
<a href="Page.aspx?LIndex=Z">Z</a>
...
看起来问题在于启用的值-它需要是布尔值
这项工作:
<asp:LinkButton ID="indexLetter" Text='<%# this.FooData()%>'
runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "cssclass")%>'
Enabled='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"enabled"))%>'></asp:LinkButton>
不幸的是,如果我这样做(将数据类型添加到列中,并且仅使用数据表),仍然会发生这种情况。我编辑了帖子以保留异常跟踪。请确保异常在“字母”上,而不是“已启用”part?你是对的zarembisty!就是这样,我从来没有尝试过只从enabled属性中删除Eval…谢谢!我希望MS永远不要在页面中添加绑定。如果你只能从后面的代码中进行绑定以避免这些问题,那会更好。不!那太可怕了。一个简单的循环会让这变得简单很多。
<asp:LinkButton ID="indexLetter" Text='<%# this.FooData()%>'
runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "cssclass")%>'
Enabled='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"enabled"))%>'></asp:LinkButton>