2009-02-17 4 views
0

Я разрабатываю веб-страницу в Asp.Net 1.1 и имею DataGrid, которая позволяет пользователям добавлять, редактировать и удалять записи базы данных. Строка нижнего колонтитула содержит текстовые поля, позволяющие добавлять новые записи.Как контролировать, какие валидаторы используются в DataGrid

Для каждого столбца я определил <ItemTemplate>, <EditItemTemplate> и <FooterItemTemplate> элементы. Элементы FooterItemTemplate и EditItemTemplate в моей разметке aspx содержат элементы RequiredFieldValidator, а также текстовые поля. (смотри ниже)

<asp:TemplateColumn HeaderText="Offer Code"> 
    <ItemTemplate> 
    <%# DataBinder.Eval(Container, "DataItem.OfferCode") %> 
    </ItemTemplate> 
    <FooterTemplate> 
    <asp:TextBox ID="txtNewOfferCode" Runat="server" /> 
<asp:RequiredFieldValidator ID="reqNewOfferCode" ControlToValidate="txtNewOfferCode" Display="None" ErrorMessage="Please specify 'Offer Code'" Runat="server" /> 
    </FooterTemplate> 
    <EditItemTemplate> 
<asp:TextBox id=txtOfferCode Runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.OfferCode") %>' /> 
<asp:RequiredFieldValidator ID="reqOfferCode" ControlToValidate="txtOfferCode" Display="None" ErrorMessage="Please specify 'Offer Code'" Runat="server" /> 
    </EditItemTemplate> 
</asp:TemplateColumn> 

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

ответ

2

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

+0

Как получить доступ к валидаторам? У меня нет программного доступа к ним. Я могу получить доступ к валидаторам EditItemTemplate с помощью аргумента Редактировать событие, но я не вижу, как попасть на валидаторы FooterItemTemplate. –

+0

Если у вас есть доступ к объекту EditItemTemplate, вы сможете получить доступ к GridView, а затем к FooterTemplate. Это даст уродливый код :-( Возможно, самое лучшее, что нужно сделать, это прекратить использование FooterTemplate и добавить пустую строку в GridView, если вы хотите вставить новую запись. –