Vinodh Muthusamy Ответов: 1

Невозможно удалить этот столбец, так как он является частью выражения: in C#


У меня есть dataable и iam, маскирующие один столбец, добавляя новое имя столбца как MASKEDSSN.
Он был замаскирован. Но мне нужно удалить старое имя столбца SSN. При удалении он выдает ошибку как
Цитата:
Цитата:
Невозможно удалить этот столбец, так как он является частью выражения: MaskedSSN = 'XXX-XX-'+SUBSTRING(CONVERT(SSN, System.Строка),6,4).


DataTable employeeTable = new DataTable();
employeeTable.Rows.Add("123455789");
employeeTable.Rows.Add("123447789");
employeeTable.Rows.Add("823456719");
employeeTable.Columns.Add("SSN");


Ниже приведен код, который я пробовал

int index = employeeTable.Columns["SSN"].Ordinal;
               employeeTable.Columns.Add("MaskedSSN", typeof(string));
               employeeTable.Columns["MaskedSSN"].Expression = "'XXX-XX-'+SUBSTRING(CONVERT(SSN, System.String),6,4)";
               DataTable newsss = new DataTable();

               newsss = employeeTable.Copy();
               newsss.AcceptChanges();
               newsss.Columns.RemoveAt(index);
               newsss.Columns.Remove("SSN");


Что я уже пробовал:

<pre> int index = employeeTable.Columns["SSN"].Ordinal;
                employeeTable.Columns.Add("MaskedSSN", typeof(string));
                employeeTable.Columns["MaskedSSN"].Expression = "'XXX-XX-'+SUBSTRING(CONVERT(SSN, System.String),6,4)";
                DataTable newsss = new DataTable();

                newsss = employeeTable.Copy();
                newsss.AcceptChanges();
                newsss.Columns.RemoveAt(index);
                newsss.Columns.Remove("SSN");

1 Ответов

Рейтинг:
10

OriginalGriff

Ну да. А чего ты ожидал?
Вы создаете MASKEDSSN и устанавливаете его значение в качестве вычисляемого столбца на основе SSN. Компьютерные столбцы не "вычисляют один раз и забывают", они вычисляются, когда значение необходимо: когда строка добавляется, когда строка отображается. Если бы вы могли удалить столбец SSN, столбец MASKEDSSN не смог бы вычислить значение строк!

Поэтому вполне понятно, что система жалуется и говорит вам: "вы не можете этого сделать".


Vinodh Muthusamy

Есть ли другой способ маскировки, не добавляя новых столбцов

Richard Deeming

Выполните цикл по строкам и обновите значение столбца до замаскированного значения.