2009-12-13 2 views
0

Типичной ситуацией:Использования проверки управления с GridView

В моем контроле GridView, у меня есть Footer строка, которая содержит текстовое поле и кнопку «Добавить». Когда кнопка нажата, текст, введенный в TextBox, добавляется в сетку. У меня также есть элемент управления проверкой, требующий, чтобы при нажатии кнопки этот текст был введен в TextBox. После добавления новой строки текстовое поле становится ясным, чтобы обеспечить легкий доступ к следующему элементу.

Пользователь может также отредактировать текст в ранее введенных строках, щелкнув Edit LinkButton, который помещает строку в режим редактирования. При изменении ссылки на LinkButton.

Проблема:

Когда я нажимаю на ссылку Update, чтобы зафиксировать изменения, если текст не был введен в TextBox строкой колонтитула в (ряд, используемый для добавления новой записи), контроль проверки возвращает Ошибка «Требуется запись». Он должен содержать только запись, если кнопка «Добавить» нажата, а не если нажата кнопка «Обновить ссылку».

Похоже, что проверочное событие контроля проверки на стороне сервера запускается перед событием RowCommand GridView или событием btnAdd_Click, поэтому мне интересно, как с сервера я могу определить, какое событие вызвало обратную передачу, чтобы я мог определить, должны выполняться для данной ситуации.

Я использую сочетание «необходимых» валидационных исправлений на стороне клиента, а также более сложные серверные стороны. Поскольку я, вероятно, должен иметь некоторые проверки на стороне сервера, я был бы доволен тем, что просто знал, как обрабатывать серверные проверки, но на самом деле знаю, как справиться с этой ситуацией для проверки клиентов, также будет полезно.

Спасибо.

ответ

3

Преобразуйте свой CommandField в TemplateField, а в EditItemTemplate измените свойство CausesValidation Update LinkButton на false.

Update:

Преобразование в TemplateField прост и не требует каких-либо изменений кода (только разметка):

alt text

Изменение свойства CausesValidation ложь в разметке является также нетто:

<asp:TemplateField ShowHeader="False"> 
    <EditItemTemplate> 
    <asp:LinkButton ID="lnkUpdate" runat="server" CausesValidation="False" 
     CommandName="Update" Text="Update"></asp:LinkButton> 
    <%-- 
     More controls 
    --%> 
    </EditItemTemplate> 
    <ItemTemplate> 
    <%-- 
     Controls 
    --%> 
    </ItemTemplate> 
</asp:TemplateField> 

Теперь, если вы хотите, чтобы ваши нижние колонтитулы и строки данных, подлежащие проверке отдельно, вам необходимо использовать группы проверки, которые объясняются в Microsoft's documentation. Все элементы управления в одной и той же группы проверки будет их свойство ValidationGroup устанавливается в такое же значение, как это:

<asp:LinkButton ID="lnkUpdate" runat="server" CausesValidation="True" 
    CommandName="Update" Text="Update" ValidationGroup="GridViewDataRowGroup"> 
</asp:LinkButton> 
+0

Я просто пытаюсь научиться GridView контроль, но это похоже на решительный шаг, который приводит в преобразовании много написано кода. Я попробую, надеясь на другой ответ. – ChadD

+0

Я предполагаю, что это говорит о том, что я могу использовать элементы проверки правильности для строки нижнего колонтитула или строк данных, но не для обоих. – ChadD

+0

Возможно, вам нужны группы проверки. См. Мой обновленный ответ. –

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