2009-02-09 70 views
3

我在UpdatePanel中设置了一个GridView。 GridView有一个绑定到Gridview1_SelectedIndexChanged方法的SELECT CommandField。我希望GridView在选中某行后进行刷新,但它永远不会。我尝试了几种不同的场景,但都没有效果。在UpdatePanel中UpdateMethod之后刷新GridView

  • 我在UpdatePanel上将UpdateMode设置为“有条件”和“始终”,并试图强制UpdatePanel更新到代码后面的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> 

回答

3

我想我看到你的问题。尝试添加一个DataKeyNames参数到GridView中,并使用您想要操作的行的ID。接下来删除触发器部分,因为您不需要它们来完成您正在做的事情。由于您想对某些内容采取行动,因此将CommandField更改为其他选项之一,例如您目前不使用的删除选项。接下来修改你的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

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

+0

谢谢Barbaros,网格自动绑定到数据源。 – BrianG 2009-02-10 20:30:15

+0

噢好吧,不客气 – 2009-02-10 20:36:34