C# 如何更改DataTable列的值并仅在DataGrid中显示,而不更新数据库的实际表

C# 如何更改DataTable列的值并仅在DataGrid中显示,而不更新数据库的实际表,c#,wpf,datagrid,updatecommand,C#,Wpf,Datagrid,Updatecommand,我在SQL数据库表中有一个名称为加密的列(所有其他列都未加密)。我必须解密带有加密名称的列,以便在DataGrid中向我的应用程序用户显示,但不应更改SQL数据库的实际表(必须保留为加密名称) 我认为UpdateCommand可以用来更新实际的表,我必须找到一个替代UpdateCommand的方法 或者是否有其他方法可以只解密DataTable上的一列,而不影响数据库的实际表 我的简单代码是 SqlCommand gridcomm = new SqlCommand(); gridcomm.Con

我在SQL数据库表中有一个名称为加密的列(所有其他列都未加密)。我必须解密带有加密名称的列,以便在DataGrid中向我的应用程序用户显示,但不应更改SQL数据库的实际表(必须保留为加密名称)

我认为UpdateCommand可以用来更新实际的表,我必须找到一个替代UpdateCommand的方法

或者是否有其他方法可以只解密DataTable上的一列,而不影响数据库的实际表

我的简单代码是

SqlCommand gridcomm = new SqlCommand();
gridcomm.Connection = Conn;

gridcomm.CommandText = "SELECT Id, customername, phonenumber FROM customers";

SqlDataAdapter gridda = new SqlDataAdapter(gridcomm);

SqlDataReader gridreader = gridcomm.ExecuteReader();
while (gridreader.Read())
{
}
gridreader.Close();

DataTable griddt = new DataTable("customers");
gridda.Fill(griddt);

foreach (DataRow row in griddt.Rows)
{
    string strcustomername = (string) row["customername"].ToString();
    bytecustomername = Convert.FromBase64String(strcustomername);
    string decryptedcustomername = DecryptStringFromBytes_Aes(bytecustomername, byteAESKey, byteAESIV);

    row["customername"] = decryptedcustomername;
}

gridda.UpdateCommand = new SqlCommandBuilder(gridda).GetUpdateCommand();

dataGrid_Totalcustomerlist.ItemsSource = griddt.DefaultView;
gridda.Update(griddt);

Hello Kay Lee:我认为如果你在你的观点中考虑实现一个隐蔽器,你会得到你想要的东西。在IValueConverter实现中,可以实现解密例程。转换器是WPF绑定语句中的扩展语法。如果这还不清楚,那么我会再充实一些。以下是转换器的重要参考:

亲切问候,,
马克·沃德尔(Mark Wardell)

我读过很多帖子,但没有解决办法,因为这个案例很少见。然而,我只是逻辑思考,最终自己找到了解决办法

我们只需要删除2行与更新相关的代码,因为我们不需要更新

gridda.UpdateCommand = new SqlCommandBuilder(gridda).GetUpdateCommand();

gridda.Update(griddt);

希望这对某人有所帮助。

我真的很感激你的卓越。然而,我理解建议链接的内容,但使用转换器编写代码对我来说很困难,因为我的专业只是生物化学,远离软件行业。请您指导我简单地修改我的上述代码或其他比转换器更简单的方法好吗?再次感谢您。我明天将进行研究,可能有一些问题要问您。请进入您的更新命令并从中获取sql语句,好吗?还可以选择SQL。我想我有个简单的主意。我刚到外面吃午饭(远东)。select语句与“select Id、customername、phonenumber from customers”一样正常。这里不是Update语句,而是SqlCommandBuilder的UpdateCommand。通常,我们通过dataadapter选择列并填充datatable,这就足够了。但是,在这种情况下,我必须在填充datatable后解密datatable的列。若我们需要在数据表填充后更改值,人们说我们需要使用SqlCommandBuilder更新命令来避免异常。