【问题标题】:why selectedrowstyle of a gridview is not shown when doing asyncpostback?为什么在进行异步回发时不显示 gridview 的 selectedrowstyle?
【发布时间】:2012-07-20 08:37:16
【问题描述】:

我有一个包含选择命令字段的网格视图。

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

gridview 在更新面板之外。

我希望当按下选定按钮时,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在更新面板之外时不会改变所选行的颜色。 我知道当我将它移到更新面板中时它会起作用,但我想知道为什么会发生这种情况。

谢谢。

忘记了最重要的事情:

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

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

【问题讨论】:

    标签: asp.net ajax gridview updatepanel


    【解决方案1】:

    是的,我的错,我只是复制了你的场景,我发现的原因实际上很简单。

    首先,使用UpdatePanel 的异步回发只会刷新其子控件(这就是它们被称为部分渲染帖子的原因)。 UpdatePanel 之外的控件不会被刷新。

    正如你所说:

    我知道当我将它移到更新面板中时它会起作用,但我想知道为什么会发生这种情况。

    乍一看,我认为GridView 应该执行完整的回发,但不,那是因为您将此控件添加为UpdatePanel 的触发器

    原因是您将来自GridView 的所有事件注册为UpdatePanel 的触发器,并且您使用此&lt;asp:AsyncPostBackTrigger ControlID="GridView1" /&gt; 注册它会导致所需的效果,异步触发GridView 事件刷新UpdatePanel,由于GridView外部,所以它没有刷新

    您可以更改此行为,解决问题,但您的页面将执行完整回发

    <asp:PostBackTrigger ControlID="GridView1" />
    

    提醒一下(对你和我来说 =p),我们需要记住,每当我们将控件注册为UpdatePanel 的触发器时,它的事件将被捕获,以便异步发送,如果源代码控制在UpdatePanel之外,有时会导致不希望的效果。

    【讨论】:

    • 它不像我说的那样,当我只是在更新面板中传输gridview时它工作正常。
    • 你完全正确,我复制了你的问题并修复了,检查我更新的答案
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 2011-04-08
    • 2018-01-17
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多