为什么在执行asyncpostback时不显示gridview的selectedrowstyle?

时间:2012-07-20 08:37:17

标签: asp.net ajax gridview updatepanel

我有一个gridview,其中包含一个select命令域。

我还有一个包含详细信息视图的更新面板。

gridview在更新面板之外。

我希望当按下选定按钮时,网格视图的选定行可以更改颜色,细节将显示在详细信息视图中,而不会刷新页面。

这是我的代码:

        <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在更新面板之外时,gridview不会更改所选行的颜色。 我知道当我在更新面板中移动它时它会工作,但我想知道为什么会发生这种情况。

感谢。

忘了最重要的事情:

        <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>

我认为这是不良行为的根源所在......但我仍然不确定为什么......

1 个答案:

答案 0 :(得分:0)

是的,我的坏,我只是复制你的场景,我发现的原因实际上非常简单。

首先,使用UpdatePanel 的异步回发只会刷新其子控件(这就是为什么它们被称为部分渲染帖子)。 <{1}}以外的控件将不会刷新。

如你所说:

  

我知道当我在更新面板中移动它时它会起作用,但我想知道为什么会这样。

乍一看,我认为UpdatePanel应该做一个完整的回发但是没有,这是因为你添加了这个控件作为GridView的触发器

原因是您正在注册来自UpdatePanel的所有事件作为GridView的触发器,并且您正在使用此UpdatePanel注册它,这会导致所需的效果,触发<asp:AsyncPostBackTrigger ControlID="GridView1" />事件以异步方式刷新GridView,并且由于UpdatePanel 之外,因此不会刷新

您可以更改此行为,修复问题,但您的网页会执行完整回发

GridView

作为提示(对于您和我= p),我们需要记住,每当我们将控件注册为<asp:PostBackTrigger ControlID="GridView1" /> 的触发器时,其事件将被捕获命令以异步方式发送,如果它不在UpdatePanel

之外,有时会导致不呈现源控件的不良影响