c#
  • asp.net
  • data-binding
  • repeater
  • 2009-10-05 53 views 1 likes 
    1

    我使用數據綁定來遍歷數據庫返回的記錄集,其中一個記錄集是逗號分隔的項目列表 - 我試圖用第二個中繼器來顯示每個記錄集項目作爲超鏈接。到目前爲止,這是我的代碼:綁定中繼器的數據源

    <asp:Repeater ID="myRepeater" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "SomeList").ToString().Trim(',') %>'> 
    <ItemTemplate> 
        <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'><%# Container.DataItem %></a> 
    </ItemTemplate> 
    </asp:Repeater> 
    

    麻煩的是,到目前爲止,有3個原因,這並不工作:

    • 我得到了server tag is not well formed錯誤,除非我刪除了runat="server" - 爲什麼這是? (爲什麼它沒有runat="server"?)
    • Container.DataItem評估爲System.Data.DataRowView的一個實例 - 我如何獲取當前分割的字符串片段?
    • 更重要的是,這似乎只打印出1 Container.DataItem,即使我知道我給它的字符串中有一個逗號 - 任何想法?

    回答

    1

    代替Eval(),對於非平凡的場景,我通常將Container.DataItem轉換爲我想要的類型,然後以類型安全的方式從那裏對其執行操作。

    「Not well formed」錯誤是由Trim()參數周圍的單引號造成的。如果在屬性定義的外部使用單引號,則不能在其中使用它們。在像你這樣的情況下,數據綁定定義中有很多代碼,我經常創建一個輔助方法(在腳本runat = server中用於MVC視圖和其他內聯代碼友好的情況下,或者用於傳統的代碼隱藏Web表單應用程序)處理我想運行的代碼。通過重構爲一種方法,它可以澄清HTML並避免蹩腳的單/雙引號限制。

    不管你把代碼的,在你的情況,你想:

    1. 投的Container.DataItem到DataRowView的
    2. 使用[]操作
    3. 呼叫字符串中提取該SomeList列值.Split()該字符串把你的CSV串入一個字符串數組
    4. 使用,作爲您的內中繼器的數據源

    代碼應該是這個樣子:

    <asp:Repeater ID="myRepeater" runat="server" 
        DataSource='<%# ((System.Data.DataRowView)Container.DataItem)["SomeList"].ToString().Split(new string[] {","}, StringSplitOptions.RemoveEmptyEntries)%>'> 
        <ItemTemplate> 
        <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'> 
         <%# Container.DataItem %> 
        </a> 
        </ItemTemplate> 
    </asp:Repeater> 
    
    +0

    謝謝,這個工作一種享受和清除了大量的數據如何綁定爲我工作。 – Justin 2009-10-06 12:00:32

    1

    你指定的UpdateCommand,對的DeleteCommand在SqlDataSource?

    即使沒有提供正確的參數,受影響的行將始終爲0.如果它有兩個更新命令參數,則必須通過updatecommand提供兩個參數。

    有關它的更多信息請查看此網址:http://www.itpian.com/Coding/4774-Data-binding.aspx

    相關問題