2010-06-08 57 views
1

說我有一個像Dictionary<string, Dictionary<string, int>>或類似的數據結構,我想把它作爲一個HTML表格作爲第一個字符串鍵和作爲第二個字符串鍵的列標題。有沒有內置或其他控制這個?將元組呈現給ASP.NET 2.0中的表的簡單方法?

+0

或者,我可以得到從數據庫中的數據,如「行,列,值」的格式如果讓事情更容易... – nicolaskruchten 2010-06-08 18:24:01

+0

我最終建立一個簡單的控件有一個'setData(row,col,value)'方法並呈現給HTML表格。 – nicolaskruchten 2010-06-10 18:09:17

回答

3

沒有內置控件可以識別這樣的複雜數據結構。你需要爲它做一些自定義編碼。

你可以用一個帶有ItemDataBound事件處理程序的Repeater輕鬆實現它。只是把我的頭,沒有測試的頂部:

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound=" Repeater1_OnItemDataBound"> 
<ItemTemplate> 
    <asp:Literal ID="Literal1" runat="server" /> 
</ItemTemplate> 
</asp:Repeater> 


protected void Repeater1_OnItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == 
      ListItemType.AlternatingItem) 
    { 
     var rowHeader= (e.Item.DataItem).Key; 
     var columnHeaders = (e.Item.DataItem).Value; 
     foreach (var header in columnHeaders) 
     { 
       // build string to populate table row, assign to Literal1 
     } 
    } 
} 
+0

是否有一個控件可以識別持有這種數據類型的另一種類型的數據結構?像上面提到的SQL結果(row,col,value)? – nicolaskruchten 2010-06-08 18:34:39

+0

不是我所知道的。您可以使用gridview識別DataRow風格的數據,因此如果您可以將元組放入DataTable中,則可以輕鬆地綁定到表並將HeaderTemplate處理您的頭,並且行頭可以位於第一列中。但是,就我所知,沒有即時可用的電子表格樣式控件來解析數據。 – womp 2010-06-08 18:43:34

0

您可以使用嵌套數據綁定控件並跳過OnItemDataBoundStep,只需綁定被綁定外項目的屬性的內部控制。

因此,對於您的情況,您的字典中的每個項目都包含一個密鑰和另一個字典。因此,每次綁定時,都可以訪問該項目的字典,以將其設置爲內部數據綁定控件的數據源。

請看下面的例子:

<%@ Page Language="C#" %> 

<%@ Import Namespace="System.Collections.Generic" %> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Dictionary<string, Dictionary<string, int>> TestDict = new Dictionary<string, Dictionary<string, int>>(); 


     //This is just loading the test dictionary  
     for (int i = 0; i < 10; i++) 
     { 
      Dictionary<string, int> ColData = new Dictionary<string, int>(); 

      TestDict.Add("Row Header " + i, ColData); 
      for (int j = 0; j < 5; j++) 
      { 
       ColData.Add("Col Header " + j, i + j); 
      } 
     } 

     //Bind the Outer Repeater 
     RepeaterRow.DataSource = TestDict; 
     RepeaterRow.DataBind(); 



    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
    <form id="form1" runat="server"> 


    <asp:Repeater ID="RepeaterRow" runat="server"> 
     <HeaderTemplate> 
      <table> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <th> 
        <%# Eval("Key") %> 
       </th> 
       <asp:Repeater ID="RepeaterColumn" DataSource='<%# Eval("Value")%>' runat="server"> 
        <ItemTemplate> 
         <td> 
          <%# Eval("Value") %> 
         </td> 
        </ItemTemplate> 
       </asp:Repeater> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      </table> 
     </FooterTemplate> 
    </asp:Repeater> 


    </form> 
</body> 
</html> 
相關問題