在UpdatePanel中UpdateMethod之后刷新GridView

时间:2009-02-09 16:47:42

标签: c# gridview asp.net-ajax

我在UpdatePanel中设置了一个GridView。 GridView有一个与Gridview1_SelectedIndexChanged方法绑定的SELECT CommandField。我想在选择一行后刷新GridView,但它永远不会。我尝试了几种不同的方案,但似乎都没有。

  • 我在UpdatePanel上将UpdateMode设置为“Conditional”和“Always”,并尝试在后面的代码中强制更新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 个答案:

答案 0 :(得分:3)

我想我看到了你的问题。尝试将DataKeyNames参数添加到GridView,并使用您要操作的行的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>

答案 1 :(得分:1)

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