2013-09-27 24 views
1

我是ASP.NET新手。我有一個基本的工作gridview列出公司名稱(見下面的代碼)。我想要做的是在每個公司下提供另一個聯繫人的子列表,在'子列表'中縮進一點。Gridview中的每個項目的細節行

我想以某種方式循環訪問Gridview數據,然後運行聯繫人查詢,將「Select * from Import_Contact where Company ='來自GridView DataSource的公司'」,然後顯示子集,如果每個公司的聯繫人。輸出應該是這樣的:

1) Company A 

     1) Contact x 

     2) Contact y 

     1) Contact x 

2) Company B 

     1) Contact h 

     2) Contact i 

等等...

<asp:GridView ID="GridView1" runat="server" 
AutoGenerateColumns="False" 
AllowPaging="False" 
SelectedIndex="0" 
DataSourceID="dsUploadList"      
ShowHeaderWhenEmpty="True" EmptyDataText="No records Found"       
EnableRowClick = "False" Width="100%" AllowSorting="True" 
AutoGenerateEditButton="False"    
> 
<Columns> 
<asp:BoundField ReadOnly="True" HeaderText="Row" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="5%" 
    InsertVisible="False" DataField="Row" 
    SortExpression="Row" /> 

<asp:BoundField ReadOnly="True" HeaderText="Company" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="30%" 
    InsertVisible="False" DataField="Company" 
    SortExpression="Company" />    

</Columns>  
</asp:GridView> 
    <asp:SqlDataSource ID="dsUploadList" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnApps %>" 

    SelectCommand="SELECT DISTINCT(Company) 
      , ROW_NUMBER() OVER (ORDER By Company ASC) AS Row 
      FROM dbo.Import_CompanyContact icc WHERE RefNum = @RefNum "      
> 

<SelectParameters> 
    <asp:QueryStringParameter Name="RefNum" QueryStringField="RefNum" DefaultValue="0" Type="Int16" /> 
</SelectParameters> 

的任何建議,如何做到這一點?代碼很好的例子。謝謝。

回答

5

我會使用ListViewDataList,因爲它可以更容易地操作顯示器。這應該讓你在正確的道路上:

<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> 

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

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

    //depending on your needs bind the details on demand 
    //or preload during ItemDataBound 

    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(); 
      } 
     } 
    } 
} 
+0

感謝您快速響應。我會嘗試這條正確的道路。 – milacay

相關問題