Как изменить значения столбца DataTable и показать только в DataGrid, не обновляя актуальную таблицу базы данных
У меня есть столбец с зашифрованным именем (все остальные столбцы не зашифрованы) в таблице базы данных SQL. И я должен расшифровать столбец с зашифрованным именем, чтобы показать его в DataGrid пользователям моего приложения, но фактическая таблица базы данных SQL не должна изменяться (должна оставаться в виде зашифрованного имени).
Я думаю, что UpdateCommand работает для обновления фактической таблицы, и мне нужно найти альтернативу, чем ниже UpdateCommand.
Или есть альтернативный способ расшифровки только 1 столбца в 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);
2 ответа
Я прочитал много постов, но решения для меня не было, так как этот случай необычен. Тем не менее, я просто подумал логически и, наконец, нашел решение сам.
Нам просто нужно удалить 2 строки кода, связанного с обновлением, потому что нам не нужно обновлять.
gridda.UpdateCommand = new SqlCommandBuilder(gridda).GetUpdateCommand();
gridda.Update(griddt);
Надеюсь, это поможет кому-то..
Здравствуйте, Кей Ли: Я думаю, что если вы посмотрите на реализацию Coverter в своем View, вы получите именно то, что вы ищете. В вашей реализации IValueConverter вы можете реализовать процедуру расшифровки. Конвертер - это расширенный синтаксис в операторе связывания WPF. Если это не ясно, я уточню еще немного. Вот отличный справочник для конвертеров: http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/
С уважением, Марк Уорделл