none
Fila del GridView cuyos campos están siendo validados por un CustomValidator RRS feed

  • Pregunta

  • Buenas tardes, 

    necesito hacer lo siguiente:

    Tengo un GridView con las opciones de editar y de borrar. El borrado funciona correctamente y sin problemas. 

    El Update funciona, pero no me comprueba que lo que se ha modificado sea correcto. 

    Me explico:

    Cuando hago click en Edit, se me pone la fila del GridView en modo Edit. Puedo borrar y cambiar información. 

    El problema lo tengo en que no puedo validar esa información. No sólo los campos no pueden estar vacíos sino que también tengo que comprobar más cosas (que lo introducido no exista ya en la base de datos, etc).  

    Para ello he creado un CustomValidator que tiene como control asociado el TextBox en el que el usuario puede modificar, por ejemplo, la contraseña. 

    En su método de validación, necesito recuperar, no solo la contraeña que el usuario ha cambiado (args.Value), sino también el usuario que se corresponde con la contraseña que se ha cambiado, es decir, el nombre de usuario que está en la columna de la izquierda, en la misma fila del GridView. 

    ¿Sabéis cómo puedo hacer eso? 

    Además, también me gustaría recuperar el propio TextBox de Usuario y de Contraseña, pues si no es correcto lo introducido, me gustaría cambiarle el estilo y ponerle el borde en rojo... 

    Os dejo parte de mi código para que os hagáis una idea, aunque creo que de poco os va a servir... 

    ASPX (parte del GridView): 

    <Columns>
                        <asp:TemplateField HeaderText="User" SortExpression="user">
                            <ItemTemplate>
                                <%# Eval("user") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                 <%# Eval("user") %>
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Password" SortExpression="password">
                            <ItemTemplate>
                                <%#Eval("password") %>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox ID="txtBoxEditPassword" CssClass="normalTextBox" runat="server" Text='<%#Bind("password")%>' />
                                <asp:CustomValidator runat="server" ID="editPasswordValidator" OnServerValidate="editPasswordValidator_ServerValidate" ErrorMessage="*" CssClass="color:red"></asp:CustomValidator>
                            </EditItemTemplate>
                        </asp:TemplateField>

    Código del validador:

    protected void editPasswordValidator_ServerValidate(object source, ServerValidateEventArgs args)
            {
                string editedPassword = args.Value.ToString();
                string userAsociated = null; // Aquí tengo que recuperar el usuario cuya contraseña se está editando
                UsersBLL _users = new UsersBLL();
                if (string.IsNullOrWhiteSpace(editedPassword))
                {
                    args.IsValid = false;
                }
                else if (_users.identify(userAsociated, editedPassword))
                {
                    //The combination user - password already exists
    
                }
            }

    viernes, 27 de noviembre de 2015 17:48