2012-03-15 64 views
2

代码隐藏(C#):如何在使用asp服务器控件DataList时将Eval数据绑定表达式绑定到Label?

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!Page.IsPostBack) 
      { 
       List<string> lst = new List<string>(); 

       lst.Add("1"); 
       lst.Add("2"); 

       dlSample.DataSource = lst; 
       dlSample.DataBind(); 
      } 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 
    } 

    protected void dlSample_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     try 
     { 
      if (e.Item.DataItem.ToString().Equals("1")) 
       e.Item.DataItem = "one"; 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 
    } 

ASP:

<asp:DataList ID="dlSample" runat="server" OnItemDataBound="dlSample_ItemDataBound"> 
     <ItemTemplate> 
      <asp:Label ID="lbl" runat="server" Text='<%# Eval("") %>'></asp:Label> 
     </ItemTemplate> 
     </asp:DataList> 

我用我的代码,并插入其上的物品清单。之后,我以编程方式绑定它,并在我的ItemDataBound事件上运行时修改了一个项目。在显示DataList控件上的项目时遇到问题。我的问题是,如何在ASP上使用Eval数据绑定表达式来显示它,或者除了Eval之外,还有什么方法?

非常感谢您提前。

在ASP

回答

2

在当dlSample_ItemDataBound方法被调用时,在ItemTemplate的表情已经评估而且,即使DataItem被改变,效果也不会被反映出来。

您可以使用下面的代码块。

<asp:Label ID="lbl" runat="server" 
     Text='<%# (string)Container.DataItem == "1" ? "one" : (string)Container.DataItem %>' 
     > 
</asp:Label> 

您可以删除OnItemDataBound="dlSample_ItemDataBound",因为不再使用。

作为替代方案,如果你仍然想使用这个处理程序:

<asp:DataList ID="dlSample" runat="server" OnItemDataBound="dlSample_ItemDataBound"> 
    <ItemTemplate> 
      <asp:Label ID="lbl" runat="server"></asp:Label> 
     </ItemTemplate> 
</asp:DataList> 

protected void dlSample_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     //dataitem is supposed to be a string object, so you can cast it to string, no need to call ToString() 
     var item = (string)e.Item.DataItem; 

     // find the label with "lbl" ID, use e.Item as the Naming Container 
     var lbl = (Label)e.Item.FindControl("lbl"); 
     if (item == "1") 
      lbl.Text = "one"; 
     else 
      lbl.Text = item; 
    } 

我总是喜欢做这些事情的第一种方式。

+1

非常感谢Adrian。你给了我合适的想法。谢谢。 – 2012-03-15 07:28:12

2

,写这篇文章: -

<asp:DataList ID="dlSample" 
      runat="server" 
      OnItemDataBound="dlSample_ItemDataBound"> 
      <ItemTemplate> 
       <asp:Label ID="lbl" runat="server" 
            Text='<%# Container.DataItem %>'></asp:Label> 
      </ItemTemplate> 
     </asp:DataList> 

,并在代码写在这背后: -

protected void dlSample_ItemDataBound(object sender, DataListItemEventArgs e) 
     { 
      try 
      { 
       if (e.Item.DataItem.ToString().Equals("1")) 
        ((Label)e.Item.FindControl("lbl")).Text = "One"; 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 
     } 
+0

没有理由拒绝投票。上面提到的代码完美地工作。 – 2012-03-15 06:19:49

+0

你是对的,我编辑了你的答案只是为了删除我的downvote,对downvote感到抱歉,我误解了你的答案 – 2012-03-15 09:13:58