ASP排序加密数据

时间:2016-05-02 14:25:34

标签: c# asp.net sorting gridview encryption

我的数据库中的数据已加密。当我在gridview上打印它时,它是这样的:

在我的标记上:

 <asp:GridView ID="GridView1" SelectMethod="GetParents" ... >
     <Columns>
      <asp:TemplateField HeaderText="LastName" SortExpression="LastName">
        <ItemTemplate>
            <asp:Label Text='<%# GetDecrypted((string)Eval("LastName"))%>'
                runat="server" />
        </ItemTemplate>
      </asp:TemplateField>
     </Columns>
</asp:GridView>

我的代码:

protected string GetDecrypted(string Decrypt)
{
  //returns a decrypted version
   return ENCRYPTION.Decrypt(Decrypt);
}

这是我的选择方法

public IQueryable<Parent> GetParents()
    {
        InfantRecordContext db = new InfantRecordContext();
        int id = int.Parse(Session["DoctorID"].ToString());
        return db.Parent.Where(p => p.DoctorID == id);
    }

问题是,当我对列进行排序时,它会对加密数据进行排序而不是解密,这是一种我可以对gridview上显示的解密数据进行排序的方法吗?

或者有没有办法可以在排序前解密字段?

2 个答案:

答案 0 :(得分:1)

您只需在事件中解密,然后手动执行排序。

网格视图实际上应包含:GridView.Sorting事件。目的:

  

当对列进行排序的超链接时,会引发Sorting事件   单击,但在GridView控件处理排序操作之前。   这使您可以提供执行a的事件处理方法   自定义例程,例如取消排序操作,无论何时   事件发生。一个GridViewSortEventArgs对象传递给   事件处理方法,使您可以确定排序   列的表达式并指示选择操作   应该被取消。要取消选择操作,请设置取消   GridViewSortEventArgs对象的属性为true。

代码示例如下:

  protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
  {

    //Retrieve the table from the session object.
    DataTable dt = Session["TaskTable"] as DataTable;

    if (dt != null)
    {

      //Sort the data.
      dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
      TaskGridView.DataSource = Session["TaskTable"];
      TaskGridView.DataBind();
    }

  }

  private string GetSortDirection(string column)
  {

    // By default, set the sort direction to ascending.
    string sortDirection = "ASC";

    // Retrieve the last column that was sorted.
    string sortExpression = ViewState["SortExpression"] as string;

    if (sortExpression != null)
    {
      // Check if the same column is being sorted.
      // Otherwise, the default value can be returned.
      if (sortExpression == column)
      {
        string lastDirection = ViewState["SortDirection"] as string;
        if ((lastDirection != null) && (lastDirection == "ASC"))
        {
          sortDirection = "DESC";
        }
      }
    }

    // Save new values in ViewState.
    ViewState["SortDirection"] = sortDirection;
    ViewState["SortExpression"] = column;

    return sortDirection;
  }

答案 1 :(得分:0)

将查询存储到列表中。存储时解密必要的值。然后将列表作为

返回
list.AsQueryable();

使其与gridview兼容。