【问题标题】:selected gridview, populate a gridview with a nested gridview. doesnt work. helppp选定的gridview,用嵌套的gridview 填充gridview。不工作。帮助
【发布时间】:2011-12-21 10:30:23
【问题描述】:

我有 3 个网格视图

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

第三个网格视图嵌套在第二个网格视图内。

但是,第三个网格视图从不显示任何单个数据.. 我错过了什么?

如果在页面加载时填充了第二个网格视图,我可以实现这一点。 这是代码 我在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>

【问题讨论】:

标签: asp.net gridview


【解决方案1】:

您必须在GridView1 上设置AutoPostBack="True",以便在用户选择一行时回发。但我不熟悉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
  }
}

【讨论】:

  • 我会试一试。但是,将 autopostback 设置为 true 并不会影响,因为当您单击链接按钮时它已经是 postback。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多