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

How to change values of column of DataTable and show only in DataGrid not updating actual table of database

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

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

或者是否有其他方法可以仅解密 DataTable 上的 1 列而不影响数据库的实际 table?

我的简单代码是,

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);

你好 Kay Lee:我认为如果你考虑在你的视图中实现 Coverter,你将得到你正在寻找的东西。在您的 IValueConverter 实现中,您可以实现 Decrypt 例程。转换器是 WPF 绑定语句中的扩展语法。如果这还不清楚,那么我将充实一些。这是一个很好的转换器参考:http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/

亲切的问候, 马克·沃德尔

我已经阅读了很多帖子,但没有适合我的解决方案,因为这种情况并不常见。但是,我只是理所当然地想了想,终于自己找到了解决办法。

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

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

gridda.Update(griddt);

希望这对某人有所帮助..