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>