Обновление GridView после UpdateMethod в UpdatePanel - PullRequest
3 голосов
/ 09 февраля 2009

Я настроил GridView внутри UpdatePanel. GridView имеет команду SELECT CommandField, которая связана с методом Gridview1_SelectedIndexChanged. Я хотел бы, чтобы GridView обновлялся после выбора строки, но это никогда не происходит. Я пробовал несколько разных сценариев, и ни один из них не работает.

  • Я установил 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>

Ответы [ 2 ]

3 голосов
/ 10 февраля 2009

Мне кажется, я вижу твою проблему. Попробуйте добавить параметр GatView для параметра DataKeyNames с идентификатором строки, в которой вы хотите действовать. Затем удалите раздел «Триггеры», так как они вам не понадобятся для того, что вы делаете. Поскольку вы хотите что-то предпринять, измените CommandField на один из других параметров, таких как «Удалить», который вы в данный момент не используете. Затем измените ObjectDataSource, чтобы определить DeleteMethod в myNamespace.ItemMgr, который принимает Id (параметр DataKeyNames) из GridView и выполняет задачу, которую вы хотите выполнить. После возврата метода он обновит GridView из определенного SelectMethod.

  <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 голос
/ 10 февраля 2009

Если я вас правильно понимаю, вам нужно привязывать источник данных к вашей сетке при каждой обратной передаче.

...