2016-02-28 3 views
0

Я использую gridview с пейджингом для отображения таблицы базы данных. Когда пользователь вставляет UserID, я хочу проверить дубликаты в пользовательской функции проверки на стороне клиента. Я должен пройти через все значения в сетке, а не только те, которые отображаются. У меня возникли проблемы с получением всех значений в столбце UserID, чтобы проверить наличие вставленного UserID. Это разметка:Проверка вставки сетки для дубликатов

<asp:TemplateField HeaderText="UserID"> 
       <HeaderTemplate> UserID 
        <asp:ImageButton ID="senigvUserIDFilter" runat="server" ImageUrl="Images/filter.png" OnClientClick="return ShowHideFilterTxtBox('senigvTxtUserIDFilter')" /> 
        <asp:TextBox ID="senigvTxtUserIDFilter" runat="server" AutoPostBack="true" style="display:none;" ClientIDMode="Static" OnTextChanged="senigvGridFilter_TextChanged"> 
        </asp:TextBox> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:Label ID="senigvLblUserID" runat="server" Text='<%# Bind("UserID") %>' ClientIDMode="Static" 
        ></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:Label ID="senigvLblEditUserID" runat="server" Text='<%# Bind("UserID") %>'></asp:Label>     
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="senigvTxtBxInsertUserID" runat="server" Text='<%# Bind("UserID") %>' ClientIDMode="Predictable"></asp:TextBox>  
         <asp:RequiredFieldValidator ID="senigvRequiredFieldInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server" 
         ErrorMessage="Required field." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error"> 
        </asp:RequiredFieldValidator>    
         <asp:RegularExpressionValidator ID="senigvMaxValInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server" 
         ErrorMessage="Maximumn length is 40." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error" 
         ValidationExpression="^.{1,40}$" > 
        </asp:RegularExpressionValidator> 
        <asp:CustomValidator ID="senigCustomDupValInsertUserID" runat="server" ControlToValidate="senigvTxtBxInsertUserID" CssClass="message-error" 
         ErrorMessage="*" ClientValidationFunction="ValidateUserID" EnableClientScript="true" 
         ValidationGroup="InsertSenderValidation"> 
        </asp:CustomValidator> 
       </FooterTemplate> 
      </asp:TemplateField> 

Это функция JQuery, 'ValidateUserID'

function ValidateUserID(sender, args) { 
     args.IsValid = true; 
     sender.innerHTML = ''; 

     var table = document.getElementById("#UserInfoGridVew"); 
     var tbody = table.tBodies[0]; 
     //loop thru all UserIDs 
     for (i = 0, rowLen = tbody.rows.length; i < rowLen; i++) { 
      row = tbody.rows[i]; 
      var currentUserID = row.cells[1].innerHTML; 
      alert('currentUserID: ' + currentUserID); 

      if (args.Value == currentUserID) { 
       //if values are equal; input invalid; set error message 
       args.IsValid = false; 
       sender.innerHTML = "UserID exists."; 
       break; 
      } 
     }  
    }; 

Когда я использую эту функцию, я получаю ошибку Object required на линии var tbody = table.tBodies[0];

мне нужно для доступа ко всем строкам данных в gridview, затем проверьте столбец UserID для дубликатов. Как я могу это сделать?

ответ

0

Единственный способ получить все данные, чтобы определить, является ли это дубликат, - сделать запрос JSON обратно в базу данных и сравнить значения.

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

0

Можете ли вы попробовать ниже код

function ValidateUserID(sender, args) { 
    args.IsValid = true; 
    sender.innerHTML = ''; 

var gvDrv = document.getElementById("#UserInfoGridVew"); 
for (i = 1; i < gvDrv.rows.length; i++) { 
var cell = gvDrv.rows[i].cells; 
var currentUserID = cell[1].innerHTML; 

alert('currentUserID: ' + currentUserID); 

    if (args.Value == currentUserID) { 
     //if values are equal; input invalid; set error message 
     args.IsValid = false; 
     sender.innerHTML = "UserID exists."; 
     break; 
    } 

} 
} 

Открыть источник просмотра страницы и убедитесь, что сетка идентификатор «UserInfoGridVew».

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

+0

Я пробовал свой код и получаю сообщение об ошибке, поскольку переменная 'table' имеет значение null. Идентификатор gridview имеет атрибут, установленный на 'ClientIDMode = 'Static''. Я проверил HTML и скрипт, и идентификатор отображается как «UserInfoGridView». –

+0

Упс, понял. Когда мы используем javascript, мы не добавляем # перед идентификатором. Таким образом, это должно быть просто document.getElementById ('UserInfoGridView'); # перед добавлением идентификатора в JQuery. –

+0

Спасибо, что поймали это. Я тоже должен был знать. Но переменная 'table' возвращает только 18 строк, потому что это размер страницы. Мне нужны все строки в datatable. Я попытался использовать 'datatable', но переменная всегда имеет значение null. –

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