Запускайте jquery каждый раз, когда сетка заполняется, и перебирайте все строки gridview

#jquery #asp.net #gridview

#jquery ( jquery ) #asp.net #gridview #jquery

Вопрос:

Я хочу, чтобы файл jquery запускался каждый раз, когда заполняется сетка, и файл jquery должен проходить через gridview и выполнять некоторые действия, основанные на определенных условиях. В моей сетке у меня есть столбец с именем StatusID в gridview, и на основе Statuid я хочу задать текст для метки, которая находится внутри другого столбца. Я пытаюсь добиться этого с помощью jQuery. Я не знаю, где я ошибаюсь.

У меня есть внешний JS-файл, который называется Setstatus.js

StatusID — это привязанное поле в gridview. lblStatus — это метка в поле шаблона gridview.

 $(document).ready(function () {

    $('#<%=gvAsgnments.ClientID%>')
                 .find('tr')
                 .each(function (row) {
                     $(this).each(function (col) {
                         if (($.trim($(this).find("input[id*='StatusId']").val() === 0))) {
                             $("input[id*='lblStatus']", $(this)).val('New');
                             $("input[id*='StatusId']", $(this)).style.display = 'block';
                         }
                     });
                 });

}); 
  

Я имею в виду Setstatus.js на моей странице aspx

 <script type="text/javascript" src="Scripts/Admin.js" ></script>
  

Файл jquery не дает никаких результатов. Что я упускаю из виду?

пример HTML-кода:

    <div>
        <table class="CNIGridView" cellspacing="0" rules="all" align="center" border="1" id="MainContent_gvAsgnments" style="border-collapse:collapse;">
            <tr class="CNIGridViewHeader">
                        <th scope="col" abbr="Status">amp;nbsp;</th>
                        <th scope="col" abbr="Claim">Claim</th>
                        <th scope="col" abbr="Claimant">Claimant</th>
                        <th scope="col" abbr="Date">Date</th>
                        <th scope="col">StatusId</th>
            </tr>
                    <tr class="CNIGridViewRow">
                  <td>
                           <span id="MainContent_gvAdminActiveAsgnments_lblStatus_0"></span>
                          </td>
                          <td>
                           <span id ="MainContent_gvAdminActiveAsgnments_lblClaim_0">MH001025</span>
                          </td>
                           <td>
                          <span id="MainContent_gvAdminActiveAsgnments_lblClaimant_0">Deborah</span>
                           </td>
                           <td>10/2/2011 12:00:00 AM</td>
                <td>0</td>
                   </tr>
        </table>
    </div>
  

Заранее спасибо

ВВ

Ответ №1:

Это не выполняется или просто не дает результатов? Есть определенная разница. Открывали ли вы консоль javascript или отладчик, чтобы увидеть, возникают ли какие-либо ошибки на странице?

Одна мысль — вы говорите, что lblStatus — это метка. Если это действительно HTML-метка, то input[id*='lblStatus'] она не будет работать как селектор. Так и должно быть label[id*='lblStatus'] . Кроме того, я не думаю, что вы задаете текст элемента label с помощью val() , который вы бы использовали text() .

Надеюсь, это поможет.

Комментарии:

1. Спасибо. Когда я отлаживаю, я вижу, что функция выполняется, но не дает никаких результатов. Я внес изменения, о которых вы упомянули, до сих пор безуспешно.

2. Можете ли вы включить фрагмент того, как выглядит HTML-код после его рендеринга?

Ответ №2:

Предполагая, что вы используете Asp.Net метки, метка на самом деле не будет иметь идентификатора того, что вы укажете в своем коде. Самый простой способ прикрепить это — использовать свойство CssClass, чтобы присвоить каждому из них идентификатор и адресовать их, используя его в вашем селекторе.

Что касается вашей повторной привязки GridView, какой метод вы используете для его обновления?

Комментарии:

1. gridview находится внутри multiview <pre><code> <asp: MultiView ID=»mvAdmin» runat=»server»> <asp:View ID=»viewActive» runat=»server»>» align =»center» > </code></pre> . Для привязки я использую метод databind.

2. Я думаю, что проблема с идентификатором заключается в том, почему он использует *= operator . api.jquery.com/attribute-contains-selector

3. Мне не очень повезло с оператором contains, и я думаю, что вы получите лучшую производительность с помощью селектора классов, чем при сравнении каждого идентификатора в DOM.

4. Из вашего вопроса это звучало так, как будто может быть задействован AJAX. Используете ли вы UpdatePanels или что-то в этом роде?

5. Тогда использование CssClass должно работать для вас. Обычно я использую такие вещи для jQuery.