Динамическое создание элементов отображения и вывод в них информации из базы данных

Здесь я приведу пример динамического создания текстовых полей TextBox, с выводом в эти поля значений из источника данных.

Сразу к делу:

1. Задаем некоторые переменные и пару массивов.
DataSet ds = new DataSet(); //Создаем источник данных.
TextBox[] tb = new TextBox[100];//Массив из 100 текстбоксов, можно и списком воспользоваться, но пусть будет так.
Label[] lb = new Label[100]; //Массив подписей к полям.
int row_num = 0; //Номер выбранной записи в таблице.


2. При загрузке формы, или по событию определённому прогружаем источник данных, создаем нужное количество полей и отображаем на форме. В данном случае на панельку все данные выводим, предварительно размещённую на форме, как нам удобнее.
//При загрузке загружаем источник данных
            ds.ReadXml("dataset.xml");

            //Смотрим сколько полей в таблице и создаём нужное количество ТекстБоксов
            
            int Y=50;//Для определения положения полей по вертикали.

            for (int i = 0; i < ds.Tables["Table"].Columns.Count; i++)
            {
                //Задаем описание поля
                lb[i] = new Label();
                lb[i].Text=ds.Tables["Table"].Columns[i].ColumnName;
                lb[i].Parent = panel1;
                lb[i].Top = Y * i;
                //Создаем текстбокс для поля.
                tb[i] = new TextBox();
                tb[i].Parent = panel1;
                tb[i].Top = Y * i + 20;
                //Одновременно выводим всё это на panel1.
            }


3. Функция для отображения нужной строки таблицы.
//Получаем данные
        private void GetRecord()
        {
            //Проверка есть ли данные вообще.
            if (ds.Tables["Table"].DefaultView.Count > 0)
            {
                
                //Если дошли до последней записи прыгаем на первую.
                if (ds.Tables["Table"].DefaultView.Count < (row_num + 1))
                {
                    row_num = 0;
                }

                //Обновление данных в текстбоксах
                for (int i = 0; i < ds.Tables["Table"].Columns.Count; i++)
                {
                    tb[i].Text = ds.Tables["Table"].DefaultView[row_num][i].ToString();
                }
            }
        }

Номер строки задаём в переменной row_num

Вот и всё.

Скриншот, того, что примерно должно получиться:
TextBox Label C#

Здесь можно скачать пример исходника: TestTextBoxDataSet.rar


4 комментария

avatar
А сохранение из TextBox-ов в базу, делать через цикл?
Сколько textbox-ов, столько и UPDATE-ов?
avatar
Зачем на каждый, какой нибудь одной функцией на коммит всей записи.
avatar
А можно пример!?
А то неосилю никак…
avatar
Так же как при загрузке формы, перебором составить скрипт с изменениями.
Допустим, есть поле ID — по которому будем менять и два поля FIELD1 и FIELD2 — которые хотим поменять.
Наша задача просто составить скрипт типа:
update Table
set
Table.FIELD1='значение1',
Table.FIELD2='значение2'
where 
Table.ID=ЗНАЧЕНИЕ_ID

FIELD1, FIELD2 и значения добавляем в скрипт перебором из массивов.
Всё это дело помещаем в функцию, и используем где и когда захотим.

P.S.Скрипт составлен для MySQL, для других БД может несколько отличаться.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.