0

私はこのようなものを作ろうとしています:

マスター詳細グリッドビュー

しかし、GridViewで[詳細を表示]をクリックすると、csファイルのこの行にエラーが表示されます。

gvRow.FindControl("GridView2").Visible = true;

[詳細を表示]をクリックして、ID_Probaが=から最初のテーブルのIDである他のテーブルの名前を表示しようとしています。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="id" DataSourceID="SqlDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:BoundField 
        DataField="id" 
        HeaderText="id" 
        ReadOnly="True" 
        SortExpression="id" InsertVisible="False" />
        <asp:BoundField 
        DataField="name" 
        HeaderText="name" 
        SortExpression="name" />
        <asp:CommandField ShowSelectButton="True" 
              SelectText="Show Details"/>
    </Columns>
    <EmptyDataTemplate>
        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="id" DataSourceID="SqlDataSource2" Visible="False">
            <Columns>
                <asp:BoundField DataField="id" 
                                HeaderText="id" 
                                SortExpression="id" InsertVisible="False" ReadOnly="True" />
                <asp:BoundField DataField="id_proba" 
                                HeaderText="id_proba" 
                                SortExpression="id_proba" />
                <asp:BoundField DataField="name" 
                                HeaderText="name" 
                                SortExpression="name" />
            </Columns>
        </asp:GridView>
    </EmptyDataTemplate>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProbaConnectionString %>" 
    SelectCommand="SELECT * FROM [Proba1]"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProbaConnectionString %>" 
    SelectCommand="SELECT * FROM [proba3] WHERE ([id_proba] = @id_proba)">
    <SelectParameters>
        <asp:Parameter Name="id_proba" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
</form>

これはcsファイルです:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (GridViewRow gvRow in GridView1.Rows)
    {
        gvRow.FindControl("GridView2").Visible = true;
    }
    SqlDataSource2.SelectParameters[0].DefaultValue = GridView1.SelectedDataKey[0].ToString();
    GridView1.SelectedRow.FindControl("GridView2").Visible = true;    
}
4

1 に答える 1

0

から「GridView2」を取り出して、EmptyDataTemplateに入れる必要がありますTemplateField。データがある場合、EmptyDataTemplateはまったく作成されません。また、このテンプレートはグリッド全体を対象としているため、各行にグリッドはありません。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="id" DataSourceID="SqlDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:BoundField 
        DataField="id" 
        HeaderText="id" 
        ReadOnly="True" 
        SortExpression="id" InsertVisible="False" />
        <asp:BoundField 
        DataField="name" 
        HeaderText="name" 
        SortExpression="name" />
        <asp:CommandField ShowSelectButton="True" 
              SelectText="Show Details"/>
<asp:TemplateField>
    <ItemTemplate>
        <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="id" DataSourceID="SqlDataSource2" Visible="False">
            <Columns>
                <asp:BoundField DataField="id" 
                                HeaderText="id" 
                                SortExpression="id" InsertVisible="False" ReadOnly="True" />
                <asp:BoundField DataField="id_proba" 
                                HeaderText="id_proba" 
                                SortExpression="id_proba" />
                <asp:BoundField DataField="name" 
                                HeaderText="name" 
                                SortExpression="name" />
            </Columns>
        </asp:GridView>
    </ItemTemplate>
<asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProbaConnectionString %>" 
    SelectCommand="SELECT * FROM [Proba1]"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProbaConnectionString %>" 
    SelectCommand="SELECT * FROM [proba3] WHERE ([id_proba] = @id_proba)">
    <SelectParameters>
        <asp:Parameter Name="id_proba" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
</form>
于 2012-09-05T21:57:35.567 に答える