Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2013, 20:24   #1
AlexMSDN_CA
Новичок
Джуниор
 
Регистрация: 17.04.2013
Сообщений: 1
По умолчанию Создать метод для скрытия данных в DataSet

Привет,

Необходимо разработать метод, который на вход получает объект DataSet
и должен пробежаться по каждому значению в этом объекте, заменив звездочками все символы, начиная с 3го.

Метод должен вернуть DataSet с измененными значениями.

Пример: любое значение во входящем dataset = 'Universe', измененное значение в результирующем dataset = 'Uni*****'

Я начал эту задачу, но не могу закончить.
Ошибка - Property or indexer 'string.this[int]' cannot be assigned to -- it is read only

Просьба помочь:

public void Stars(DataSet dataSet)
{
string str;

foreach (DataTable table in dataSet.Tables)
{
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
str = row[column].ToString();
for (int i = 3; i < str.Length; i++)
{
str[i] = "*";
}
}
}

}
}
AlexMSDN_CA вне форума Ответить с цитированием
Старый 19.04.2013, 09:59   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

заменить то не проблема, НО... ну заменили звездочками получили Uni***** а расшифровывать как ? откуда система должна знать что там за слово? или расшифровка не нужна ?
wm_leviathan вне форума Ответить с цитированием
Старый 19.04.2013, 15:46   #3
stalsoft
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 147
По умолчанию

Начни я думаю не с DataSet'a а с DataTable!

Допустим у нас есть Datatable, у которого есть набор DataRow'сов так сказать. У каждого DataRow есть набор значений для каждого поля.

В общем вот накодил.... разбирайся)))

Создаем класс, и наследуемся от DataTable

Код:
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;
        }
    }

И вот собсна пример использования.....(расписал все варианты)

Код:
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;
dtEncoded - будет со звездами, а SourceDataTable - без!
Если что непонятно - пиши.

ЗЫ. у меня метод ReplaceWithStars заменяет первые ТРИ символа, тебе надо все после трех - поменяй значение там в цикле и все.
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров;

Последний раз редактировалось stalsoft; 19.04.2013 в 15:48.
stalsoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод для базы данных hitman12 C# (си шарп) 11 06.05.2012 12:09
Как в Dataset создать дубликат колонки? delphicoding Общие вопросы Delphi 11 19.03.2012 19:11
Макрос для скрытия листов в Excel Степан777 Microsoft Office Excel 2 02.03.2012 22:36
Dataset - как создать новую пустую запись? delphicoding Общие вопросы Delphi 4 11.09.2011 13:59
JS для скрытия части кода lukoie JavaScript, Ajax 3 29.01.2010 09:34