我的数据库中的数据已加密。当我在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上显示的解密数据进行排序的方法吗?
或者有没有办法可以在排序前解密字段?
答案 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兼容。