在UpdatePanel中进行UpdateMethod更新后,GridView的刷新

3
我在 UpdatePanel 中设置了一个 GridView。GridView 有一个 SELECT CommandField,该字段与 Gridview1_SelectedIndexChanged 方法相关联。我希望在选择一行后,GridView 能够刷新,但它从未刷新过。我已经尝试了几种不同的场景,但都没有成功。
  • 我已将 UpdateMode 设置为“条件”和“始终”,并尝试在代码后台中强制更新 UpdatePanel。
  • 我已将 CommandField 转换为一个带有按钮的模板字段。
这是经过处理的代码:
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
    <asp:GridView ID="GridView1"
         runat="server"
         AllowPaging="True" 
         AllowSorting="True"
         AutoGenerateColumns="False"
         DataSourceID="ObjectDataSource1"
         OnSelectedIndexChanged="GridView1_SelectedIndexChanged" 
         PagerSettings-Visible="true" EnableViewState="False" >
    <Columns>
        <asp:CommandField ButtonType="Image"
             SelectImageUrl="~/images/icon.gif" 
             ShowSelectButton="True" />
        <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
        <asp:BoundField DataField="Title" HeaderText="Title" 
             SortExpression="Title" />
    </Columns>
    </asp:GridView>
   </ContentTemplate>
   <Triggers>
        <asp:AsyncPostBackTrigger ControlID="GridView1" 
            EventName="SelectedIndexChanged" />
   </Triggers>
  </asp:UpdatePanel>

数据源长这样...
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
     DataObjectTypeName="myNamespace.Item"
     InsertMethod="myInsertMethod" 
     SelectMethod="mySelectMethod" 
     TypeName="myNamespace.ItemMgr"
     UpdateMethod="myUpdateMethod">
</asp:ObjectDataSource>
2个回答

3
我想我看到了你的问题。尝试在GridView中添加一个DataKeyNames参数,其中包含您要操作的行的ID。接下来删除触发器部分,因为您不需要它们来完成您正在进行的操作。由于您想要执行某些操作,请将CommandField更改为其他选项之一,例如Delete,您目前未使用该选项。接下来修改您的ObjectDataSource以在myNamespace.ItemMgr中定义一个DeleteMethod,该方法接受来自GridView的Id(DataKeyNames参数)并执行您希望执行的任务。方法返回后,它将从定义的SelectMethod刷新GridView。
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
    <asp:GridView ID="GridView1"
         runat="server"
         AllowPaging="True" 
         AllowSorting="True"
         AutoGenerateColumns="False"
         DataSourceID="ObjectDataSource1"
         PagerSettings-Visible="true" EnableViewState="False"
         DataKeyNames="Id" >
    <Columns>
        <asp:CommandField DeleteImageUrl="/images/icon.gif" 
             DeleteText="Some Text"
             ShowDeleteButton="True" 
             ButtonType="Image" />
        <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" />
        <asp:BoundField DataField="Title" HeaderText="Title" 
             SortExpression="Title" />
    </Columns>
    </asp:GridView>
   </ContentTemplate>
  </asp:UpdatePanel>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    DeleteMethod="myDeleteMethod" SelectMethod="mySelectMethod" 
    TypeName="myNamespace.ItemMgr">
</asp:ObjectDataSource>

这个可行!虽然我错过了在数据源上删除DataObjectTypeName并得到了一个无方法匹配错误。一旦我删除它,它就开始工作了。另外,我正在将项目添加到排除表中,因此它有点像逻辑删除! - BrianG

1

如果我理解正确的话,您需要在每次回发时将数据源绑定到您的网格上。


谢谢Barbaros,网格自动绑定到数据源。 - BrianG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接