Выбрать все элементы в asp.net CheckBoxList в FormTemplate Radrikrid Telerik - PullRequest
1 голос
/ 02 декабря 2011

Этот вопрос похож на этот вопрос , но большая разница в том, что CheckBoxList находится в FormTemplate у Телерка RadGrid.

Я попробовал этот подход, но он не работает:

Проверка / снятие отметки со всех элементов в списке флажков ASP.NET с использованием jQuery

Java-скрипт для списка флажков в сетке editformsettings

Вот мой код:

<telerik:RadGrid ID="RadGrid1" runat="server" ... >
   ...
   <MasterTableView ...>
      ...
      <EditFormSettings EditFormType="Template">
         <EditColumn UniqueName="EditCommandColumn1"></EditColumn>
         <FormTemplate>
            <table class="edit-table-rad" cellspacing="2" cellpadding="1" width="100%" border="0">
               ...
               <tr>
                  <td align="left" width="200px">
                     <b>Languages:</b><br />
                     <asp:CheckBox ID="chbSelectAllLanguage" runat="server" 
                                   Text="Select All"
                                   ClientIDMode="Static"/>
                  </td>
                  <td>
                     <asp:CheckBoxList ID="cblLanguage" runat="server" 
                                       DataSourceID="entityDataSourceLanguage"
                                       DataTextField="LanguageName"
                                       DataValueField="LanguageID"
                                       RepeatColumns="4">
                     </asp:CheckBoxList>
                  </td>
               </tr>
               ...
            </table>
         </FormTemplate>
      </EditFormSettings>
   </MasterTableView>
</telerik:RadGrid>

В приведенных выше примерах jQuery используется для получения CheckBox и добавления функции click. Но я не могу получить CheckBox. Я попытался получить его по идентификатору и по cssclass, но я думаю, что CheckBox в RadGrid FormTemplate не находится в DOM во время document.ready.

Есть ли способ выбрать / отменить выбор всех CheckBoxList элементов, выбрав / отменив выбор одного CheckBox?

РЕДАКТИРОВАТЬ ПОСЛЕ КОММЕНТАРИИ

Я не могу найти HTML FormTemplate, прежде чем открыть форму редактирования. Когда форма открыта, HTML-код выглядит так:

<tr>
<td width="200px" align="left">
    <b>Languages:</b>
    <br>
    <span class="chbSelectAllLanguage">
        <input id="chbSelectAllLanguage" type="checkbox" name="ctl00$MainContent$rgSurvey$ctl00$ctl02$ctl04$chbSelectAllLanguage">
        <label for="chbSelectAllLanguage">Select All</label>
    </span>
</td>
<td>
    <table id="ctl00_MainContent_rgSurvey_ctl00_ctl02_ctl04_cblLanguage" class="kipCheckBoxList">
        <tbody>
            <tr>
                //the CheckBoxList generated data, like this:
                <td>
                    <input id="ctl00_MainContent_rgSurvey_ctl00_ctl02_ctl04_cblLanguage_0" type="checkbox" value="1" name="ctl00$MainContent$rgSurvey$ctl00$ctl02$ctl04$cblLanguage$0">
                    <label for="ctl00_MainContent_rgSurvey_ctl00_ctl02_ctl04_cblLanguage_0">English</label>
                </td>
                ...
            </tr>
            ...
        </tbody>
    </table>
</td>

1 Ответ

1 голос
/ 19 декабря 2011

Я нашел ответ! Хитрость заключалась в том, чтобы поместить тег <script> внутри тега <telerik:RadCodeBlock ID="RadCodeBlock" runat="server">, а затем добавить этот код в событие ItemDataBound o RadGrid:

if (e.Item is GridEditableItem && e.Item.IsInEditMode)
{
   GridEditableItem geiItem = e.Item as GridEditableItem;
   CheckBox chbSelectAllLanguage = geiItem.FindControl("chbSelectAllLanguage") as CheckBox;
   CheckBoxList cblLanguage = geiItem.FindControl("cblLanguage") as CheckBoxList;
   chbSelectAllLanguage.Attributes.Add("onclick", "javascript:SelectDeselect('" + chbSelectAllLanguage.ClientID + "','" + cblLanguage.ClientID + "')");
}

Тогда функция выбора / отмены выбора выглядит следующим образом:

<telerik:RadCodeBlock ID="RadCodeBlock" runat="server">
   <script type="text/javascript">
      function SelectDeselect(chk, chklst) {
         var isChecked = $('#' + chk).is(':checked');
         $("[id^=" + chklst + "]").each(function () {
             $(this).attr("checked", isChecked);
         });
      }
   </script>
</telerik:RadCodeBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...