2011-12-20 62 views
1

我有3个gridviews选中gridview,用嵌套的gridview填充gridview。不工作。 helppp

1st gridview启用选择,如果它有任何数据将填充第二个gridview。

而第三个gridview嵌套在第二个gridview中。

但是,第三个gridview永远不会显示任何单个数据.. 我在想什么?

我可以实现这一点,如果第二个gridview填充页面加载。 这里是代码 IM在asp.net C#

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="SurveyID" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:BoundField DataField="SurveyID" HeaderText="SurveyID" 
       SortExpression="SurveyID" /> 
      <asp:BoundField DataField="SurveyTitle" HeaderText="SurveyTitle" 
       SortExpression="SurveyTitle" /> 
      <asp:CommandField ShowSelectButton="True" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
     SelectCommand="SELECT [SurveyID], [SurveyTitle] FROM [Survey]"> 
    </asp:SqlDataSource> 
    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="QuestionID" DataSourceID="SqlDataSource2"> 
     <Columns> 
      <asp:BoundField DataField="QuestionID" HeaderText="QuestionID" 
       InsertVisible="False" ReadOnly="True" SortExpression="QuestionID" /> 
      <asp:BoundField DataField="QuestionTitle" HeaderText="QuestionTitle" 
       SortExpression="QuestionTitle" /> 
      <asp:BoundField DataField="AnswerType" HeaderText="AnswerType" 
       SortExpression="AnswerType" /> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" 
         DataSourceID="SqlDataSource1" DataKeyNames="ResultID"> 
         <Columns> 
          <asp:BoundField DataField="ResultID" HeaderText="ResultID" 
           SortExpression="ResultID" InsertVisible="False" ReadOnly="True" /> 
          <asp:BoundField DataField="QuestionID" HeaderText="QuestionID" 
           SortExpression="QuestionID" /> 
          <asp:BoundField DataField="AnswerValue" HeaderText="AnswerValue" 
           SortExpression="AnswerValue" /> 
         </Columns> 
        </asp:GridView> 
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
         ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
         SelectCommand="SELECT * FROM [Results] WHERE ([QuestionID] = @QuestionID)"> 
         <SelectParameters> 
          <asp:Parameter Name="QuestionID" Type="Int32" /> 
         </SelectParameters> 
        </asp:SqlDataSource> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
     SelectCommand="SELECT [QuestionID], [QuestionTitle], [AnswerType] FROM [Question] WHERE ([SurveyID] = @SurveyID)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="GridView1" Name="SurveyID" 
       PropertyName="SelectedValue" Type="String" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
+0

显示你已经尝试过。 http://stackoverflow.com/faq这是VB.NET或C#? – 2011-12-20 13:36:37

+0

已更新。是.net c# – 2011-12-20 13:43:50

回答

0

你必须设置AutoPostBack="True"GridView1,因此,如果用户选择的行回发。但我不熟悉SqlDataSource。所以我会在SelectedIndexChanged处理程序中设置GridView2的DataSource属性,然后DataBind它。

如果您想在GridView2绑定到数据绑定到内的网格,你应该处理的GridView2RowDataBound event,发现内网有,设置它的数据源和数据绑定它。

void GridView2_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
    var rowView = (DataRowView)e.Row.DataItem; 
    var GridView3 = (GridView)e.Row.FindControl("GridView3"); 
    //set it's DataSource according to this row's DataItem 
    } 
} 
+0

我会给它一个镜头。然而,只是把autopostback真实不会影响,因为它已经回发时,你点击链接按钮。 – 2011-12-20 15:07:54