0

選択コマンドフィールドを含むグリッドビューがあります。

詳細ビューを含む更新パネルもあります。

グリッドビューは更新パネルの外にあります。

選択したボタンが押されたときに、グリッドビューの選択した行を変更して、ページを更新せずに詳細ビューに詳細を表示したい。

これが私のコードです:

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Column1" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:CommandField HeaderText="details" ShowSelectButton="True" />
            <asp:BoundField DataField="Column1" HeaderText="Column1" SortExpression="Column1" />
        </Columns>
        <SelectedRowStyle BackColor="#FFFFFF" />
    </asp:GridView>


    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="Column1" DataSourceID="SqlDataSource2"  Height="50px" Width="125px">
                <Fields>
                    <asp:BoundField DataField="Column1" HeaderText="Column1" InsertVisible="False" ReadOnly="True" SortExpression="Column1" />
                    <asp:BoundField DataField="Column2" HeaderText="Column2" SortExpression="Column2" />
                </Fields>
            </asp:DetailsView>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="GridView1" />
        </Triggers>
    </asp:UpdatePanel>

問題は、選択した行が更新パネルの外にある場合、gridview がその行の色を変更しないことです。updatepanel内に移動すると機能することはわかっていますが、なぜこれが起こるのか知りたいです。

ありがとう。

最も重要なことを忘れていました:

        <asp:SqlDataSource ID="SqlDataSource2" runat="server"  ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
        SelectCommand="SELECT * FROM Products WHERE (Column1=@Column1)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="GridView1" Name="Column1" PropertyName="SelectedValue" />
                </SelectParameters>
      </asp:SqlDataSource>

これが不正行為の原因だと思います...しかし、まだ理由はわかりません...

4

1 に答える 1

0

はい、悪いです。私はあなたのシナリオを複製したところです。私が見つけた理由は実際には非常に単純です。

まず、 を使用した非同期ポストバックは、UpdatePanel その子コントロールのみを更新します(そのため、部分レンダリング ポストと呼ばれます)。の外側のコントロールはUpdatePanel更新されません。

あなたが言及するように:

updatepanel内に移動すると機能することはわかっていますが、なぜこれが起こるのか知りたいです。

一見GridView、完全なポストバックを行うべきだと思いましたが、違います。これは、このコントロールをトリガーとして追加したためです。UpdatePanel

その理由は、 からのすべてのイベントを のGridViewトリガーとしてUpdatePanel登録しており、これを使用して登録している<asp:AsyncPostBackTrigger ControlID="GridView1" />ため、目的の効果が発生し、GridViewイベントを非同期で起動して をリフレッシュしUpdatePanelGridView外部にあるため、リフレッシュされません。

この動作を変更して問題を修正できますが、ページは完全なポストバックを実行します。

<asp:PostBackTrigger ControlID="GridView1" />

リマインダーとして (あなたと私 =p)、コントロールを のトリガーとして登録するたびにUpdatePanel、そのイベントが非同期に送信されるためにキャッチされ、レンダリングされないという望ましくない結果が生じることがあることを覚えておく必要があります。外部にある場合はソース管理UpdatePanel

于 2012-07-20T08:43:39.450 に答える