Необходимо разработать метод, который на вход получает объект DataSet и должен пробежаться по каждому значению в этом объекте, заменив звездочками все символы, начиная с 3го
Категория: .NET
2013-07-04 17:02:31
Метод должен вернуть DataSet с измененными значениями.
Создаем класс, и наследуемся от DataTable
code: #csharp
public class DataTableEx : DataTable { public DataTable SourceDataTable { get; set; } public DataTable GetEncodedDataTable { get { DataTable dt = new DataTable(); //Скопировали все поля for (int count = 0; count < this.SourceDataTable.Columns.Count; count++) dt.Columns.Add(this.SourceDataTable.Columns[count].ColumnName); //Шифруем значения + добавляем for (int row = 0; row < this.SourceDataTable.Rows.Count; row++) { List<object> tmp = new List<object>(); for (int col = 0; col < this.SourceDataTable.Rows[row].ItemArray.Length; col++) { if (this.SourceDataTable.Rows[row][col] != DBNull.Value && !string.IsNullOrEmpty(this.SourceDataTable.Rows[row][col].ToString())) tmp.Add(ReplaceWithStars(this.SourceDataTable.Rows[row][col].ToString())); else tmp.Add(string.Empty); } dt.Rows.Add(tmp.ToArray()); } return dt; } } //Конструктор, принимает DataTable для зашифровки public DataTableEx(DataTable source) { this.SourceDataTable = source; } private string ReplaceWithStars(string str) { string result = string.Empty; for (int count = 0; count < str.Length; count++) { if (count <= 2) result += "*"; else result += str[count]; } return result; } }
И вот собсна пример использования.....(расписал все варианты)
code: #csharp
DataTable dt = new DataTable(); dt.Columns.Add("1"); dt.Columns.Add("2"); dt.Rows.Add(new object[] { "11", 111111 }); dt.Rows.Add(new object[] { "22", 222 }); dt.Rows.Add(new object[] { "33", 3333 }); DataSet ds = new DataSet(); ds.Tables.Add(new DataTableEx(dt)); DataTable dtEncoded = (ds.Tables[0] as DataTableEx).GetEncodedDataTable;
tEncoded - будет со звездами, а SourceDataTable - без!
автор: stalsoft
Поделиться: