2011-08-15 44 views
1

我想要一個具有group by和ajax功能的表格。Treeview和帶有Ajax的表格

實施例:

表頭(在每個列排序功能)

  • +/-(圖像可以摺疊或展開)由元素1 組元素1中的所有元素的
    • 表視圖
  • +/-(圖像可以摺疊或展開)通過元素2
    • 元素2
  • 的所有元素的+/-表視圖由元素3(圖像可以摺疊或展開)組元素3

的所有元素如果的

  • 表視圖點擊「按元素1分組」應該有一個Ajax請求來加載Element1所有元素的表格視圖。同爲元素2和元素3,等

    我希望你明白我想要什麼:-)

    什麼是做到這一點的最好方法是什麼? Ajax,asp:Treeview等?

    感謝

回答

1

這很可能,但我會使用ListView或DataList作爲父容器。這給一個鏡頭:

<table width="595px"> 
    <asp:DataList BackColor="#ffffff" id="DataList1" DataKeyField="<ID>" OnItemDataBound="DataList1_ItemDataBound" runat="server" Width="100%">  
     <ItemTemplate> 
      <tr> 
       <td> 
        <asp:LinkButton ID="LinkButton1" runat="server" Text="+" OnCommand="LinkButton1_Command" CommandArgument='<%#Container.ItemIndex%>'></asp:LinkButton>  
       </td> 
       <td><%#Eval("<COLUMN NAME>")%></td> 
       <td><%#Eval("<COLUMN NAME>")%></td> 
       <td><%#Eval("<COLUMN NAME>")%></td> 
      </tr> 
      <asp:Panel ID="pnlChildView" runat="server"> 
       <asp:DataList ID="DataList2" runat="server" Width="100%"> 
        <ItemTemplate> 
         <tr> 
          <td><%#Eval("<CHILD OLUMN NAME>")%></td> 
          <td><%#Eval("<CHILD COLUMN NAME>")%></</td> 
          <td><%#Eval("<CHILD COLUMN NAME>")%></</td>       
         </tr> 
        </ItemTemplate> 
       </asp:DataList> 
      </asp:Panel> 
     </ItemTemplate> 
    </asp:DataList> 
</table> 

而當用戶點擊的LinkBut​​ton /按鈕在DataList1,做這樣的事情:

protected void LinkButton1_Command(object sender, CommandEventArgs e) 
{ 
    //pass index of item in command argument 
    int itemIndex = Convert.ToInt32(e.CommandArgument);  

    //find the pnlChildView control 
    Panel childViewPanel = (Panel)DataList1.Items[itemIndex].FindControl("pnlChildView"); 
    if (childViewPanel != null) 
    { 
     //toggle visibility of childViewPanel and bind child list if panel is visible 

     if (childViewPanel.Visible) 
     { 
      DataList childList = childViewPanel.FindControl("DataList2"); 
      if (childList != null) 
      { 
       int keyValue = (int)DataList1.DataKeys[itemIndex]; 

       //bind the list using DataList1 data key value 
       childList.DataSource = <DATA SOURCE>; //get data using keyValue 
       childList.DataBind(); 
      } 
     } 
    } 
}