在Repeater控件中更改ASP.NET控件的属性

时间:2009-08-08 02:55:37

标签: asp.net controls repeater code-behind pageload

我的问题很简单。这就是我对aspx页面的看法:

<ul>
    <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" >
    <ItemTemplate>
        <li><asp:HyperLink runat="server" ID="link" /></li>
    </ItemTemplate>
    </asp:Repeater>
</ul>

我正在尝试从SQL服务器到列表中获取超链接列表。这就是我在代码隐藏中所拥有的:

protected void Page_Load(object sender, EventArgs e)
{
    DataSet ds = Utilities.RunSelectQuery("SELECT *");
    DataTable dt = ds.Tables[0];

    linksList.DataSource = dt;
    linksList.DataBind();
}

如何在数据绑定到NavigateUrl后更改Text中的asp:HyperLinkRepeater属性?我想在代码隐藏中执行此操作,如果我在aspx页面中使用<%# Eval("URL") %>执行此操作,我可以使用它,但这与ASP.NET的内容有关。

编辑:由于womp:

,这个解决方案对我有用
protected void linksList_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView row = (DataRowView)e.Item.DataItem;
        HyperLink link = (HyperLink)e.Item.FindControl("link");

        link.Text = row["description"].ToString();
        link.NavigateUrl = row["URL"].ToString();
    }
}

2 个答案:

答案 0 :(得分:4)

实际上,在你的模板中使用Databinder syntax是一个很好的方法,我不确定你的意思是“它反对ASP.Net的全部内容”。

但是,如果您真的想在代码中执行此操作,则可以在OnItemDataBound处理程序中执行此操作(它看起来就像您创建的那样)。像这样的东西(读:未经测试)应该可以做到这一点:

void linksList_OnItemDataBound(object Sender, RepeaterItemEventArgs e) 
{

        if (e.Item.ItemType == ListItemType.Item 
              || e.Item.ItemType == ListItemType.AlternatingItem) {

             DataRow row = e.Item.DataItem as DataRow;
             Hyperlink link = e.Item.FindControl("link"));
             link.Text = row["URL"];
             link.NavigateUrl = row["URL"];
             }
          }
       }   

答案 1 :(得分:1)

这样做的方法就像你说的那样。如果您只想显示URL,那么在后面的代码中执行此操作会增加不必要的工作。您还希望将标记放在HeaderTemplate和FooterTemplate中。

    <asp:Repeater runat="server" ID="linksList" OnItemDataBound="linksList_OnItemDataBound" >
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate>
        <li><asp:HyperLink runat="server" ID="link" NavigateUrl='<%# Eval("url") %>' /></li>
    </ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
    </asp:Repeater>