2013-12-04 3 views
0

У меня есть GridView контроль внутри UpdatePanel и простой TextBox.Лучший способ сохранения данных GridView внутри UpdatePanel

После того, как текст введен в TextBox (и нажата кнопка), список результатов извлекается из базы данных и привязывается к GridView.

 grd.DataSource = DataManager.GetFilteredList(txt.Text); 
     grd.DataBind(); 

Каждая строка возвращается имеет LinkButtonTemplateField столбец с параметром CommandArgument и CommandName.

Я хочу запустить код при нажатии этой кнопки, но потому, что весь Page воссоздан даже при частичной обратной передаче GridView теряет свои данные. Обычно я передавал необходимые параметры внутри строки запроса, но поскольку это insidide UpdatePanel Я не могу этого сделать.

Что такое хороший и чистый подход к этому вопросу? Единственное, что приходит мне на ум, было бы вместо того, чтобы использовать RowCommand, чтобы создать кнопку GridView с простым элементом HTML <a>, передав параметр строки запроса в его параметре HRef, затем запустим полную обратную передачу и, наконец, проведем операцию внутри события Page_Load но это кажется неуклюжим.

Вот запрашиваемая ASP разметки:

<asp:UpdatePanel ID="upd" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <div class="input-group"> 
       <asp:TextBox ID="txt" runat="server" CssClass="form-control"></asp:TextBox> 

       <div class="input-group-btn"> 
        <asp:LinkButton ID="btn" CssClass="btn btn-default" runat="server" OnClick="btn_Click">Search</asp:LinkButton> 
       </div> 
      </div> 

      <hr /> 
      <asp:GridView ID="grd" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" ItemType="xxx.Policy" AllowPaging="True" PageSize="10" OnRowCommand="grd_RowCommand"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:LinkButton ID="btn" CommandName="Connect" CommandArgument='<%#: Item.Id %>' runat="server">Connect</asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="grd" EventName="RowCommand" /> 
     </Triggers> 
    </asp:UpdatePanel> 

Спасибо.

+1

Вы можете добавить некоторые из ваших ASP разметки – meda

+0

Я добавил разметку. Ничего необычного. – barjed

ответ

0

Используйте RowCommand события

protected void grd_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Connect") 
    { 
     //Add your code to connect using Item.Id 
     //get Item.Id value using e.CommandArgument.ToString() 
    } 
} 
+0

Я сделал, он не работает. GridView теряет свои данные при вызове RowCommand. – barjed

+0

попробуйте заменить '<% # Bind (" ItemId ")%>' и 'ItemId' - это поле в вашей базе данных – meda

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