2012-03-15 61 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