2013-11-20 3 views
1

내 마지막 년도 프로젝트 페이지 중 하나에서 GridView를 업데이트/편집하는 데 사용하는 DetailsView가 있습니다."삽입 모드"일 때 데이터베이스에 삽입하기 전에 DetailsView의 편집 된 필드 수정

해시 된 비밀번호를 표시해야하는 비밀번호 입력란이 있습니다.

DetailsView에서 "편집"또는 "삽입"모드로 필드에 새 암호를 삽입하거나 필드를 편집 할 때 GridView/DetailsView에 표시하기 전에 암호를 직접 해시하고 싶습니다. 물론 데이터베이스에 삽입/업데이트하기 전에.

내 GridView & DetailsView는 모두 동일한 UpdatePanel에 있으며 ObjectDataSource를 사용하고 있습니다.

그 부분 코드 : 그 코드로 "ItemInserting"이벤트에 뒤에 코드에서 암호 텍스트 상자에 액세스 할 수 있어요

<asp:DetailsView ID="DetailsViewSingleUsr" runat="server" Height="50px" 
     Width="125px" DataSourceID="SingleUserObjectDataSource" DataKeyNames="id" 
      onitemdeleted="DetailsViewSingleUsr_ItemDeleted" 
      oniteminserted="DetailsViewSingleUsr_ItemInserted" 
      onitemupdated="DetailsViewSingleUsr_ItemUpdated" AutoGenerateRows="False" 
      oniteminserting="DetailsViewSingleUsr_ItemInserting"> 
     <Fields> 
      <asp:TemplateField HeaderText="User ID" InsertVisible="False" 
       SortExpression="id"> 
       <EditItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Eval("id") %>'></asp:Label> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label8" runat="server" Text='<%# Bind("id") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="UserName" SortExpression="username"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("username") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("username") %>'></asp:TextBox> 
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
         ControlToValidate="TextBox1" Display="Dynamic" 
         ErrorMessage="Username may only contain alphanumeric characters" 
         ValidationExpression="^[a-zA-Z0-9_]*$" SetFocusOnError="True"></asp:RegularExpressionValidator> 
        <asp:CustomValidator ID="CustomValidator1" runat="server" 
         ErrorMessage="UserName already exist." SetFocusOnError="True" Display="Dynamic" 
         ControlToValidate="TextBox1" onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="First Name" SortExpression="firstname"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("firstname") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("firstname") %>'></asp:TextBox> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("firstname") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Last Name" SortExpression="lastname"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("lastname") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("lastname") %>'></asp:TextBox> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" Text='<%# Bind("lastname") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Password" SortExpression="pass"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("pass") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("pass") %>'></asp:TextBox> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label5" runat="server" Text='<%# Bind("pass") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Last Score" SortExpression="currentScore"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("currentScore") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("currentScore") %>'></asp:TextBox> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label6" runat="server" Text='<%# Bind("currentScore") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Best Score" SortExpression="maxScore"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("maxScore") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("maxScore") %>'></asp:TextBox> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label7" runat="server" Text='<%# Bind("maxScore") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField ShowHeader="False"> 
       <EditItemTemplate> 
        <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="True" 
         CommandName="Update" ImageUrl="~/images/update.png" /> 
        &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
         CommandName="Cancel" ImageUrl="~/images/cancel.png" /> 
       </EditItemTemplate> 
       <InsertItemTemplate> 
        <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="True" 
         CommandName="Insert" ImageUrl="~/images/insert.png" /> 
        &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
         CommandName="Cancel" ImageUrl="~/images/cancel.png" /> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" 
         CommandName="Edit" ImageUrl="~/images/edit.png" /> 
        &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
         CommandName="New" ImageUrl="~/images/new.png"/> 
        &nbsp;<asp:ImageButton ID="ImageButton3" runat="server" CausesValidation="False" 
         CommandName="Delete" ImageUrl="~/images/delete.png"/> 
       </ItemTemplate> 
       <ControlStyle Height="20px" Width="20px" /> 
      </asp:TemplateField> 
     </Fields> 
    </asp:DetailsView> 

:

protected void DetailsViewSingleUsr_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
{ 
    DetailsView myDetailsView = (DetailsView)sender; 
    if (myDetailsView.CurrentMode == DetailsViewMode.Insert) 
    { 
     Label9.Text = ((TextBox)myDetailsView.FindControl("TextBox4")).Text; 

    } 
} 

하지만 어떻게 수정할 수 있습니다 ? 나는 옳은 길을 가고 있는가? 어떤 제안?

많은 사람들이 Thx!

답변

2

ListViewInsertEventArgs에는 컨트롤에서 가져온 모든 삽입 값을 찾을 수있는 Values 속성이 있습니다. 해당 데이터를 수정할 수 있습니다. 예 :

e.Values["password"] = "newpassword"; 
0

감사합니다. 결국이 코드로 끝났습니다.

protected void DetailsViewSingleUsr_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
{ 
    e.Values["pass"] = LoginSecurityLogic.Hash_Password_to_MD5(e.Values["pass"].ToString()); 
} 

protected void DetailsViewSingleUsr_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
{ 
     e.NewValues["pass"] = LoginSecurityLogic.Hash_Password_to_MD5(e.NewValues["pass"].ToString()); 

} 
관련 문제