2012-02-18 4 views
0

Пытается получить доступ к элементу RequiredFieldValidator, находящемуся внутри GridView в событии RowCommand и имеющему проблемы.ASP.NET - получить контроль над событием RowCommand

Вот частичный GridView код:

<asp:TemplateField HeaderText="Password"> 
    <ItemTemplate> 
     <asp:TextBox ID="txtPassword" runat="server" CssClass="GridViewTextbox" TextMode="Password" Text='<%#Eval("WebPassword") %>' Enabled="false"></asp:TextBox> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtWebPassword" runat="server" TextMode="Password" Text='<%#Eval("WebPassword") %>'></asp:TextBox> 
     <asp:RequiredFieldValidator ID="rfvPassword" runat="server" SetFocusOnError="true" 
      ControlToValidate="txtWebPassword" Display="None" ErrorMessage='<%# Constants.Strings.PasswordRequired %>'></asp:RequiredFieldValidator> 
    </EditItemTemplate> 
    <FooterTemplate> 
     <asp:TextBox ID="txtAddWebPassword" runat="server" TextMode="Password"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="rfvAddPassword" runat="server" SetFocusOnError="true" 
      ControlToValidate="txtAddWebPassword" Display="None" ErrorMessage='<%# Constants.Strings.PasswordRequired %>'></asp:RequiredFieldValidator> 
    </FooterTemplate> 
</asp:TemplateField> 

Как вы можете видеть, что есть ВРС для EditTemplate и FooterTemplate. Моя проблема такова; когда страница загружается, у нее есть все записи в ней, включая строку emtpy внизу (Footer). Если я нажму «Редактировать» в заполненной строке, данные будут заполнены правильно, а затем, когда я нажму UPDATE, я получаю все сообщения об ошибках от выключения FOOTER RFV, что неверно. Итак, в событии RowCommand я хотел бы попробовать: если пользователь нажимает кнопку EDIT, отключите все RFV в нижнем колонтитуле (добавьте новую строку), если они нажмут что-нибудь еще, включите их.

Идеи?

Извините, это было сделано, чтобы отправить это в первый раз. В случае RowCommand, я смог найти контроль, но когда я установить свойство что-то поддельным, кажется, чтобы переопределить позже, в случае RowDataBound:

  RequiredFieldValidator rfv = (RequiredFieldValidator)gvUsers.FooterRow.FindControl("rfvAddWebLogin"); 
      rfv.ControlToValidate = string.Empty; 
      rfv.ErrorMessage = "sdfgsdfgsdgsdfgsdfgsdfgsdfg"; 
      rfv.Enabled = false; 
+0

Что является пустая строка для - вы на самом деле нужно? – dash

+0

Да, пустая строка предназначена для вставки новой строки. – Robert

ответ

2

Вы должны использовать различные ValidationGroups в вашем EditItemTemplate и FooterItemplate:

<asp:TemplateField HeaderText=""> 
    <ItemTemplate> 
     <asp:Button ID="BtnEdit" CausesValidation="False" Text="Edit" CommandName="Edit" runat="server" /> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:Button ID="BtnUpdate" ValidationGroup="UpdateUser" Text="Update" CommandName="Update" runat="server" /> 
    </EditItemTemplate> 
    <FooterTemplate> 
     <asp:Button ID="BtnInsert" ValidationGroup="InsertUser" Text="Add" CommandName="Insert" runat="server" /> 
    </FooterTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Password"> 
    <ItemTemplate> 
     <asp:TextBox ID="txtPassword" runat="server" CssClass="GridViewTextbox" TextMode="Password" 
      Text='<%#Eval("WebPassword") %>' Enabled="false"></asp:TextBox> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtWebPassword" ValidationGroup="UpdateUser" runat="server" TextMode="Password" Text='<%#Eval("WebPassword") %>'></asp:TextBox> 
     <asp:RequiredFieldValidator ID="rfvPassword" ValidationGroup="UpdateUser" runat="server" SetFocusOnError="true" 
      ControlToValidate="txtWebPassword" Display="None" ErrorMessage='<%# Constants.Strings.PasswordRequired %>'></asp:RequiredFieldValidator> 
    </EditItemTemplate> 
    <FooterTemplate> 
     <asp:TextBox ID="txtAddWebPassword" ValidationGroup="InsertUser" runat="server" TextMode="Password"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="rfvAddPassword" ValidationGroup="InsertUser" runat="server" SetFocusOnError="true" 
      ControlToValidate="txtAddWebPassword" Display="None" ErrorMessage='<%# Constants.Strings.PasswordRequired %>'></asp:RequiredFieldValidator> 
    </FooterTemplate> 
</asp:TemplateField> 

http://msdn.microsoft.com/en-us/library/bb426882.aspx#aspnett19_vldcntredtuics_topic7

Примечание: Если вы используете ValidationSummaries, вам нужно добавить соответствующий ValidationGroup для каждого ValidationSummary. Если вы оставите это свойство пустым, будут указаны только элементы управления без указанной ValidationGroup.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.validationsummary.validationgroup.aspx

+0

Спасибо, это прекрасно. Следует также отметить, что если вы используете элемент ValidationSummary (например, я), вам также необходимо установить свойство ValidationGroup. – Robert

+0

О, и вам понадобится ValidationSummary для каждой создаваемой вами группы ValidationGroup; если я там что-то не хватает. – Robert

+1

@ Robert: Да, это была опечатка, спасибо за редактирование. Вы правы, вам нужен отдельный ValidationSummary для каждой ValidationGroup (editd мой ответ). http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.validationsummary.validationgroup.aspx –

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