флажок вида сетки и JavaScript не информирует серверный код? - PullRequest
0 голосов
/ 06 мая 2011

У меня есть вид сетки asp.net, и внутри вида сетки у меня есть флажок в заголовке вида сетки примерно так:

<HeaderTemplate>
<asp:CheckBox Width="1px" ID="HeaderLevelCheckBox" AutoPostBack="true" OnCheckedChanged="SelectAllRows" runat="server" />
</HeaderTemplate>

Это дает мне хороший маленький флажокв верхней части таблицы: событие OnCheckedChanged вызывает функцию с именем SelectAllRows, которая выглядит следующим образом:

 Public Sub SelectAllRows(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim gr As GridViewRow = DirectCast(DirectCast(DirectCast(sender, CheckBox).Parent, DataControlFieldCell).Parent, GridViewRow)
        Dim h As CheckBox = DirectCast(gr.FindControl("HeaderLevelCheckBox"), CheckBox)

        For Each Row As GridViewRow In Me.gvLineItems.Rows
            Dim cb As CheckBox = CType(Row.FindControl("chkSelector"), CheckBox)
            cb.Checked = h.Checked
        Next
    End Sub

Так что, если я нажимаю этот флажок заголовка, он проверяет все элементы ввид сетки, и если я сниму флажок, он снимает все элементы в виде сетки.Это работает нормально ... но, похоже, не работает, если страница загружается, и я проверяю флажок заголовка вида сетки на true, и он выбирает все элементы в виде сетки, затем я нажимаю кнопку, такую ​​как кнопка DELETEэто вызывает некоторый код на стороне сервера.Этот код просто циклически просматривает сетку и проверяет, был ли установлен флажок, и вызывает ли он код для удаления элемента.Что-то на этот счет:

 For Each Row As GridViewRow In Me.gvLineItems.Rows
            Dim cb As CheckBox = CType(Row.FindControl("chkSelector"), CheckBox)
            Dim lID As Long = Convert.ToInt32(gvLineItems.DataKeys(Row.RowIndex).Value)
            If cb IsNot Nothing AndAlso cb.Checked Then
            'ok to delete
            End If
        Next

Когда я помещаю часы и отлаживаю это, кажется, что значение cb всегда ложно ... Даже если оно было установлено в true, когда я щелкнул флажок заголовка.Что дает ???

Фактический chkSelector в виде сетки предназначен для каждой строки, и он выглядит так:

<ItemTemplate>
<asp:CheckBox ID="chkSelector" runat="server" onclick="ChangeRowColor(this)" />
</ItemTemplate>

Также я уже проверяю обратную передачу .. это не такпроблема, помните, chkSelector не автоответчик ...

Спасибо

1 Ответ

1 голос
/ 06 мая 2011

Я сомневаюсь, что ваше сеточное представление перепривязывается при нажатии кнопки «Удалить», потому что при нажатии кнопки «Удалить» сначала загружается страница, где она перепривязывается, и ваш флажок снова становится не отмеченным. Я думаю, что вы привязываете свой gridview где-то в событии загрузки страницы.

Вы должны сделать что-то вроде этого

If(!Page.IsPostBack)
{
//Gridview Binding Code goes here....
}

Редактировать: В качестве альтернативы вы можете проверять / снимать флажки строк, используя JavaScript. Это сохранит обратную связь на стороне сервера и решит вашу текущую проблему.

Вот полный код

<script language="javascript" type="text/javascript">
function SelectAll(spanChk,grdClientID) {
       var IsChecked = spanChk.checked;
       var Chk = spanChk;
          Parent = document.getElementById(grdClientID);           
          var items = Parent.getElementsByTagName('input');                          
          for(i=0;i<items.length;i++)
          {                
              if(items[i].type=="checkbox")
              {            
                 items[i].checked=document.getElementById(spanChk).checked;     
              }
          }     
    }

<HeaderTemplate>
 <asp:CheckBox runat="server" ID="chkHeader" onclick="SelectAll('<%=chkHeader.ClientID %>, <%=yourGrid.ClientID %>') />
</HeaderTemplate>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...