Как изменить значения столбца 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/

С уважением, Марк Уорделл

Другие вопросы по тегам