2012-05-07 1 views
0

Это очень странно. У меня есть gridview с флажками и кнопками в каждой строке. Я переключаю текстовое значение кнопок (используя JQuery), представляя пользователя, добавляющего строки в корзину предметов для покупки. У меня есть кнопка в форме, отдельно от gridview, которая при нажатии вызывает событие в коде за спиной, чтобы прокручивать строки и обрабатывать выбранные строки (перетаскиваемые кнопки). Но происходит то, что при нажатии кнопки процесса строки сетки возвращаются в исходное состояние (исходный текст кнопки, а также измененные атрибуты строки для ранее выбранных строк). Я не перевязываю сетку. Это также не сетка обновлений. Теперь флажки всегда работали нормально, но текст кнопки явно отличается. Может ли кто-нибудь сказать мне, почему это происходит и как я могу это исправить? Одна из моих идей - создать столбец скрытых флажков, и когда я переключаю текст на кнопке, я могу также переключать флажки. Но я, конечно, хотел бы понять, почему это происходит. Кроме того, при возврате от кнопки процесса, которая была проверена, экран отображается в исходном состоянии.Строки Gridview, перетаскиваемые текстовые кнопки и атрибуты строк возвращаются к оригиналу при обратной передаче - как исправить?

Вот моя сетка с флажками и кнопками:

 <div class="OneHundredPercentWide" style="padding-top:7px"> 
     <asp:Panel ID="Panel1" runat="server" Width="100%" > 
      <asp:GridView id="grvSessionOrderDownloads" runat="server" BorderWidth="2px" BorderStyle="Solid" BorderColor="#C0C0FF" 
       Font-Names="Arial" Font-Bold="True" Font-Size="8pt" GridLines="Horizontal" AutoGenerateColumns="False" 
       HorizontalAlign="Left" ForeColor="Blue" CellPadding="2" AllowSorting="True" Width="100%" 
       OnRowDataBound="grvSessionOrderDownloads_OnRowDataBound" DataKeyNames="SORD_ID"> 

       <HeaderStyle Font-Names="Arial" HorizontalAlign="Center" ForeColor="White" BackColor="#152EE5" 
        CssClass="sessionOrderDownloadHeaders" /> 
       <RowStyle BackColor="White" ForeColor="#333333" /> 
       <AlternatingRowStyle BackColor="#A5B0FF" /> 
       <Columns> 
        <asp:BoundField Visible="False" DataField="SORD_ID" HeaderStyle-Width="0px" > 
       <HeaderStyle Width="0px" /> 
        </asp:BoundField> 
        <asp:TemplateField HeaderText="Select <br /> Files" HeaderStyle-ForeColor="White" > 
       <ItemTemplate > 
          <asp:CheckBox ID="chkSelectVideo" runat="server" OnClick="checkboxClicked(this)" ToolTip="Select file for download" 
           Enabled='<%# Eval("SORD_EnableSelectionCheckBox") %>' Checked='<%# Eval("SORD_SelectedForDownloadFlag") %>' /> 
        </ItemTemplate> 
         <HeaderStyle Width="6%" /> 
         <ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" /> 
        </asp:TemplateField><asp:TemplateField HeaderText="Prior <br /> Downld" HeaderStyle-ForeColor="White" > 
         <ItemTemplate > 
          <asp:Button id="btnBuy" runat="server" OnClientClick="btnBuyToggle(this); return false;" 
           Text="BUY This" CssClass="buyButton" Visible='<%# Eval("SORD_ShowBuyButton") %>' /> 
         </ItemTemplate> 
         <HeaderStyle Width="7%" /> 
         <ItemStyle CssClass="sessionOrderDownloadItems" VerticalAlign="Middle" HorizontalAlign="Center" /> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

А вот часть моего кода опережать проверить текст кнопки:

Dim gvr As GridViewRow 
    For Each gvr In grvSessionOrderDownloads.Rows 
     Dim selBtn As Button = CType(gvr.FindControl("btnBuy"), Button) 
     If Not selBtn Is Nothing Then 
      If selBtn.Enabled And selBtn.Visible Then 
       Dim strSORD_ID As String = grvSessionOrderDownloads.DataKeys(gvr.RowIndex)("SORD_ID").ToString 
       If selBtn.Text = "BUY Video" Then 
        // Note: I will process here 
       End If 
      End If 
     End If 
    Next 

Спасибо, Jim

+0

Когда вы нажмете кнопку, она будет «возвращать назад», которая обновит страницу. Все, что вы делаете на стороне клиента, исчезнет. – fankt

+0

На каком событии вы раскалываете Gridview с помощью источника данных? –

+0

Я привязываю сетку к загрузке страницы, если не обратная передача. Я не делаю никаких повторных привязок к каким-либо событиям, нет rowupdate и т. Д. –

ответ

0

Изменения флажка отправляются обратно на сервер после их изменения в браузере. Но когда вы меняете текст кнопки (или других полей) в сетке с помощью JS, измененный текст кнопки (или другие поля) не отправляется на сервер. Следовательно, когда кнопка отображается в следующем столбце, она использует исходное значение по умолчанию, которое является «ПОКУПАТЬ».

Чтобы сохранить текст кнопки, вам нужно будет создать скрытое поле вместе с кнопкой. Когда вы меняете текст кнопки (в событии OnClientClick JS), одновременно изменяйте значение скрытого поля. Скрытые изменения полей отправляются на сервер, что помогает вам читать их в событии клика процесса.

+0

Gotcha, спасибо за объяснение этого. Я должен уметь заставить его работать, как вы объяснили. Большое спасибо. Джим –

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

  • Нет связанных вопросов^_^