2013-08-18 19 views
0

我在服务器使用LINQ我填我的名单像这样如何在C#(服务器)添加类的ListView李项

selected MenuId=3;  
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList(); 
ul_HeaderMenu.DataBind(); 

这个客户端代码

<asp:ListView ID="ul_HeaderMenu" runat="server" ClientIDMode="Static"> 
    <ItemTemplate > 
     <li class="li-HeaderMenu" runat="server" ><%# Eval("Name") %> 
      <div class="TopMenuActive"></div> 
     </li> 
    <ItemTemplate> 
</asp:ListView> 

我需要添加类到李我在服务器的建设有些人认为是这样的

selected MeduId=3;  
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList(); 
ul_HeaderMenu.DataBind(); 
ul_HeaderMenu.ElementAt[3]AddClass('test'); 

我只是找到了添加类的方式来李。

回答

1

你可以使用ItemDataBound事件列表

<asp:ListView OnItemDataBound="YourListView_ItemDataBound" ID="ul_HeaderMenu" runat="server" ClientIDMode="Static"> 
    <ItemTemplate > 
     <li ID="listItem" class="li-HeaderMenu" runat="server" ><%# Eval("Name") %> 
      <div class="TopMenuActive"></div> 
     </li> 
    <ItemTemplate> 
</asp:ListView> 

然后在后面的代码,这样的事情上;

protected void YourListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    HtmlGenericControl myLi = (HtmlGenericControl)e.Item.FindControl("listItem"); 
    myLi.Attributes.Add("class", myLi.Attributes["class"].ToString() + " yournewclass"); 
} 
+0

但我怎么这样做到一个特定的项目不是所有的项目? –

+0

取决于条件,在数据绑定事件中您可以访问物品索引; e.Item.DataItemIndex –

+0

我觉得它thanx –

0

ListView由ItemTemplate部分定义的项目组成,而不是li元素。因此,当您通过索引从ListView中获取元素时,首先需要查找li,然后才能向其中添加类。 因此,您需要使用FindControl方法才能获取li。

现在,这里有一些错误。

ListView没有ElementAt方法,它是Items集合有它,但仍然,我会使用ul_HeaderMenu.Items[3]在索引处获取元素。

如果你想使用FindControl方法,你需要在你的ItemTemplate中添加一个id给你的li,你将传递给FindControl来获取li。

AddControl方法不存在,您必须在li上使用Attributes集合来更改类属性。在这里你必须小心,因为你想让类已经存在,所以你必须连接字符串,但是你不想多次添加同一个类,因此最好创建一个辅助方法AddClass接收字符串并返回它添加的类。

您可以随时做所有这些事情,但通常您会希望使用ItemDataBound事件,正如Lars Anundskas在此期间所述。

最后,虽然您可以自由使用任何您喜欢的约定,但个人而言,我发现您的外壳惯例会令人困惑 - 您可以阅读微软的建议here

相关问题