2013-09-27 5 views
1

Я новичок в ASP.NET. У меня есть основной рабочий gridview, в котором указано название компании (см. Код ниже). То, что я хочу сделать, предоставляет другой под-список контактов под каждой компанией, небольшой отступ в «под-списке».Gridview с подробными строками для каждого элемента

Я хочу каким-то образом пройти через данные Gridview, а затем запустить контактный запрос, будет «Выберите * из Import_Contact, где 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

Я бы использовал 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> 

И когда пользователь нажимает на кнопку LinkButton/в DataList1, сделать что-то вроде этого:

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

Смежные вопросы