выбранный вид сетки, заполняет вид сетки вложенным видом сетки.не работаетhelppp - PullRequest
1 голос
/ 20 декабря 2011

У меня 3 вида сетки

1-й выбор разрешения просмотра сетки, который заполнит 2-й просмотр сетки, если у него есть какие-либо данные.

в то время как 3-й вид сетки вложен во 2-й вид сетки.

Тем не менее, 3-й вид сетки никогда не показывает никаких данных. Чего мне не хватает?

Я могу добиться этого, если 2-й вид сетки заполняется при загрузке страницы. вот код я на 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>

1 Ответ

0 голосов
/ 20 декабря 2011

Вы должны установить AutoPostBack="True" на GridView1, чтобы он отправлял сообщения обратно, если пользователь выбрал строку.Но я не знаком с SqlDataSource.Поэтому я бы установил свойство DataSource GridView2 в обработчике SelectedIndexChanged, а затем DataBind it.

Если вы хотите связать данные с сеткой внутреннего объекта, когда GridView2 привязан, вам следуетобработать событие RowDataBound из GridView2, найти там внутреннюю сетку, установить источник данных и привязать данные к нему.

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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...