本文介绍了在RowUpdating(ASP.NET GridView)C#中获取GridView内部标签的旧值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在努力寻找一种方法来在GridView中获得标签的旧"值.我尝试使用hiddenFields保存它们(这会给我这个错误)使用hiddenFields时出错

I've been struggling to find a way to get an "old" value of a label in my GridView. I've tried using hiddenFields to save them (this would give me this error)Error when using hiddenFields

我也尝试使用EventArgs(e.OldValues),但它们始终为空(e.NewValues也是如此)

I've also tried using the EventArgs (e.OldValues) but those were always empty (So were the e.NewValues)

有人可以帮我吗?我的GridView:

Can anyone help me out?My GridView:

<asp:GridView CssClass="gridview" ID="GridViewAdmin_Users" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="True" OnPageIndexChanging="GridViewAdmin_Users_PageIndexChanging" OnRowCancelingEdit="GridViewAdmin_Users_RowCancelingEdit" OnRowDeleting="GridViewAdmin_Users_RowDeleting" OnRowEditing="GridViewAdmin_Users_RowEditing" OnRowUpdating="GridViewAdmin_Users_RowUpdating" DataKeyNames="ID" EnableViewState="True">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:TemplateField HeaderText="ID">
            <ItemTemplate>
                <asp:Label ID="lblUsersID" runat="server" Text='<%# Eval("id") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Gebruikersnaam">
            <EditItemTemplate>
                <asp:TextBox ID="txtUserEditNaam" runat="server" Text='<%# Eval("naam") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblUsersName" runat="server" Text='<%# Eval("naam") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Bijnaam">
            <EditItemTemplate>
                <asp:TextBox ID="txtUserEditBijnaam" runat="server" Text='<%# Eval("bijnaam") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblUsersNickname" runat="server" Text='<%# Eval("bijnaam") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Wachtwoord">
            <EditItemTemplate>
                <asp:HiddenField ID="OldPassword" Value='<%# Bind("password") %>' runat="server" />
                <asp:TextBox ID="txtUserEditPassword" runat="server" Text='<%# Eval("password") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblUsersWachtwoord" runat="server" Text='<%# Eval("password") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Salt">
            <EditItemTemplate>
                <asp:HiddenField ID="OldSalt" Value='<%# Bind("salt") %>' runat="server" />
                <asp:TextBox ID="txtUserEditSalt" runat="server" Text='<%# Eval("salt") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblUsersSalt" runat="server" Text='<%# Eval("salt") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Machtigingen">
            <EditItemTemplate>
                <asp:TextBox ID="txtUserEditPermission" runat="server" Text='<%# Eval("permission") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblUsersPermissions" runat="server" Text='<%# Eval("permission") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="ChangePassword">
            <EditItemTemplate>
                <asp:TextBox ID="txtUserEditChangePW" runat="server" Text='<%# Eval("changepassword") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblChangePassword" runat="server" Text='<%# Eval("changepassword") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="True" ButtonType="Button" EditText="Aanpassen" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" EditText="Verwijderen" />
    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#E9E7E2" />
    <SortedAscendingHeaderStyle BackColor="#506C8C" />
    <SortedDescendingCellStyle BackColor="#FFFDF8" />
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>

我的代码隐藏:

protected void GridViewAdmin_Users_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    ShowActiveGrid("panelUsers");
    int id = Convert.ToInt16(GridViewAdmin_Users.DataKeys[e.RowIndex].Value);
    // Naam ophalen vanuit de inline edit
    TextBox txtUserEditNaam = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditNaam") as TextBox;
    string naam = txtUserEditNaam.Text.Trim();
    // Bijnaam ophalen vanuit de inline edit
    TextBox txtUserEditBijnaam = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditBijnaam") as TextBox;
    string bijnaam = txtUserEditBijnaam.Text.Trim();
    // Password ophalen vanuit de inline edit
    TextBox txtUserEditPassword = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditPassword") as TextBox;
    string password = txtUserEditPassword.Text;
    // Salt ophalen vanuit de inline edit
    TextBox txtUserEditSalt = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditSalt") as TextBox;
    string salt = txtUserEditSalt.Text;
    // Permission ophanel vanuit de inline edit
    TextBox txtUserEditPermission = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditPermission") as TextBox;
    string permission = txtUserEditPermission.Text;
    // ChangePassword ophalen vanuit de inline edit
    TextBox txtUserEditChangePW = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("txtUserEditChangePW") as TextBox;
    bool chanepassword = Convert.ToBoolean(txtUserEditChangePW.Text);

    // Wachtwoorden en salt vergelijken
    Label lblpassword = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("OldPassword") as Label;
    string orginial_password = lblpassword.Text;
    Label lblsalt = GridViewAdmin_Users.Rows[e.RowIndex].FindControl("OldSalt") as Label;
    string original_salt = lblsalt.Text;

    // Hier vergelijken we het orginele wachtwoord met het 'nieuwe' wachtwoord.
    // Als die gelijk zijn betekent dat de gebruiker niets heeft gewijzigd aan het wachtwoord en dat we het wachtwoord kunnen laten zoals het was
    // Als de gebruiker echter een nieuw wachtwoord heeft ingevoerd dan kunnen we die niet in cleartext laten staan want:
    // - Dat is onveilig
    // - Hij zou nooit kunnen inloggen omdat het systeem denkt dat het het wachtwoord moet gehasht worden.
    if (orginial_password != password)
    {
        password = Security.GetHash(Security.GetHashAlgorithm(), password, salt);
    }

    if (orginial_password == password && original_salt != salt)
    {
        //exception ex = new exception("voer ook het wachtwoord opnieuw in als je de salt wijzigt");
        //throw (ex);
        GridViewAdmin_Users.EditIndex = -1;
    }

    // Edit uitvoeren
    if ((string)Session["permission"] == "WRITE" || (string)Session["permission"] == "*")
    {
        controller.EditUser(id, naam, bijnaam, password, permission, chanepassword, salt);
        // Controlleren of het systeem deze wijziging moet loggen.
        if (controller.Settings["log_users_edit"])
        {
            controller.Log((int)Session["uid"], "EDIT", (string)Session["username"] + " heeft een user (" + id + ") aangepast.");
        }
    }

    // Grid opnieuw laden
    GridViewAdmin_Users.EditIndex = -1;
    Grid();
}

推荐答案

您可以在GridView中使用 DataKeyNames .

You can use DataKeyNames in the GridView.

<asp:GridView ID="GridViewAdmin_Users" runat="server" DataKeyNames="OldPassword, OldSalt">

然后您就可以在后面的代码中访问这些键值.

Then you have access to those key values in code behind.

string orginial_password = GridViewAdmin_Users.DataKeys[e.RowIndex].Values[0];
string original_salt = GridViewAdmin_Users.DataKeys[e.RowIndex].Values[1];

这篇关于在RowUpdating(ASP.NET GridView)C#中获取GridView内部标签的旧值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 05:14