2009-02-09 5 views
3

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

  • Я установил UpdateMode в «Условные» и «Всегда» на UpdatePanel и попытался принудительно обновить UpdatePanel в коде позади.
  • Я преобразовал CommandField к TemplateField с кнопкой

Вот продезинфицировать код:

<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 paramater в GridView с идентификатором строки, в которой вы хотите действовать. Затем удалите раздел «Триггеры», поскольку они вам не понадобятся для того, что вы делаете. Поскольку вы хотите действовать над чем-то, измените CommandField на один из других параметров, таких как «Удалить», который вы в настоящее время не используете. Затем измените объект ObjectDataSource, чтобы определить DeleteMethod в myNamespace.ItemMgr, который принимает идентификатор (DataKeyNames paramater) из 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> 
+0

Это сработало! Хотя я пропустил удаление DataObjectTypeName в источнике данных и получил ошибку соответствия метода. Как только я удалил, он начал работать. Кроме того, то, что я делаю, добавляет элемент в таблицу exclude, поэтому в любом случае это похоже на логическое удаление! – BrianG

1

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

+0

Спасибо Barbaros, сетка автоматически привязывалась к источнику данных. – BrianG

+0

О, ладно, добро пожаловать –

Смежные вопросы