2009-02-09 72 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