Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.04.2024
Сообщений: 4
.NET 6

Интерфейс для обновляемой БД

10.05.2024, 17:27. Показов 490. Ответов 4

Студворк — интернет-сервис помощи студентам
Есть БД, которая заполняется и обновляется из приложения WinForms. Для нее нужно сделать интерфейс вывода, но не понимаю, как правильно описать создание Panel или GroupBox с включенными в них label и тд. Данные из таблиц достаю через DataAdapter, считаю количество рядов и через foreach пытаюсь создать панели. Но появляется проблема с расположением - указываешь положение какого-нибудь элемента и соответственно для каждого ряда создается панель и все элементы ровно на том же месте.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public DataTable GetItems()
{
 
    DataSet dataSet = new DataSet();
    DataTable dataTable = new DataTable();
    string command = $"SELECT * FROM items;";
    NpgsqlDataAdapter dataAdapter = new NpgsqlDataAdapter(command, conn);
    dataSet.Reset();
    dataAdapter.Fill(dataTable);
 
    return dataTable;
 
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
foreach (DataRow row in dataTable.Rows)
{
    Panel panel1 = new Panel();
    panel1.Location = new Point(25, 15);
    panel1.BackColor = Color.Gainsboro;
    panel1.Size = new Size(700, 125);
 
    System.Windows.Forms.Label label1 = new System.Windows.Forms.Label();
    label1.Text = row["nazvanie"].ToString();
    label1.Location = new Point(25, 54);
    label1.Font = new Font("Arial", 12);
    label1.AutoSize = true;
 
    System.Windows.Forms.DomainUpDown domainUpDown1 = new System.Windows.Forms.DomainUpDown();
    domainUpDown1.Size = new Size(63,27);
    domainUpDown1.Font = new Font("Arial", 9);
    domainUpDown1.Location = new Point(603, 84);
    
    panel1.Controls.Add(label3);
    panel1.Controls.Add(domainUpDown1);
    panel1.Controls.Add(label1);
    panel1.Controls.Add(label2);
 
    panel.Controls.Add(panel1);
 
    y += 150; // увеличение расстояния между панелями
    x++;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2024, 17:27
Ответы с готовыми решениями:

Cайт с динамически обновляемой страницей
Привет Всем! Нужно создать сайт где слева будет список статей, справа текст выбранной статьи. Статьи берутся из базы данных SQL (id,...

Мониторинг данных в обновляемой таблице
Всем привет! Возникла необходимость создания простенького скрипта, который будет автоматически, с определенным интервалом, мониторить...

Разделение данных в обновляемой таблице
Всем привет. Очень нужна помощь в таблице Excel. Стандартные способы не помогают решить проблему, наверное нужно что то вроде макросов или...

4
2395 / 1925 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
10.05.2024, 18:02
Цитата Сообщение от rkmy183 Посмотреть сообщение
для каждого ряда создается панель и все элементы ровно на том же месте.
Ну так вы им сами прописываете одни и те же координаты.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,685
Записей в блоге: 3
10.05.2024, 18:07
Цитата Сообщение от rkmy183 Посмотреть сообщение
panel1.Location = new Point(25, 15);
у тебя все панели создаются на одном и том же месте.

Добавлено через 1 минуту
Цитата Сообщение от rkmy183 Посмотреть сообщение
y += 150; // увеличение расстояния между панелями
x++;
А это просто мусор, нигде не участвует.
0
0 / 0 / 0
Регистрация: 16.04.2024
Сообщений: 4
10.05.2024, 18:08  [ТС]
ну так а как задать их создание без указания точных координат, но чтоб они были на правильном расстоянии друг от друга?
В соседней теме подсмотрел немного другой вариант кода, но так вообще ничего не создается
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
            GroupBox GP = new GroupBox();
            Label str = new Label();
            Label sdf = new Label();
            Label sfd = new Label();
            DomainUpDown dm = new DomainUpDown();
            int n, h, k, i, hgp;
            hgp = 20;
            h = 25;
 
           
            foreach (DataRow row in dataTable.Rows)
            {
                GP  = new GroupBox();
                GP.Location = new Point(h + 12, hgp + 54);
                GP.BackColor = Color.Gainsboro;
                GP.Size = new Size(700, 125);
                GP.Text = null;
 
                str = new Label();
                str.Text = row["nazvanie"].ToString();
                str.Location = new Point(h, h * 2);
                str.Font = new Font("Arial", 12);
                str.AutoSize = true;
 
                sdf = new Label();
                sdf.Text = row["author"].ToString();
                sdf.Location = new Point(hgp * 12, h * 2);
                sdf.Font = new Font("Arial", 10);
                sdf.AutoSize = true;
 
                sfd = new Label();
                sfd.Text = row["price"].ToString();
                sfd.Location = new Point(hgp * 23, h * 2);
                sfd.Font = new Font("Arial", 14);
                sfd.AutoSize = true;
 
                dm = new DomainUpDown();
                dm.Size = new Size(63,27);
                dm.Font = new Font("Arial", 9);
                dm.Location = new Point(hgp * 30, h * 3);
                
                GP.Controls.Add(str);
                GP.Controls.Add(dm);
                GP.Controls.Add(sdf);
                GP.Controls.Add(sfd);
 
 
                h += 150; // увеличение расстояния между панелями
                hgp = hgp + GP.Height;
            }
0
2395 / 1925 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
10.05.2024, 18:16
Лучший ответ Сообщение было отмечено rkmy183 как решение

Решение

Цитата Сообщение от rkmy183 Посмотреть сообщение
ну так а как задать их создание без указания точных координат
Очевидно, указывать те координаты, которые нужны.

C#
1
2
3
4
5
6
7
8
9
10
11
foreach (DataRow row in dataTable.Rows)
{
    Panel panel1 = new Panel();
    panel1.Location = new Point(25, y + 15);
 
    /* ... */
 
 
    y += 150; // увеличение расстояния между панелями
    x++;
}
Добавлено через 1 минуту
Цитата Сообщение от rkmy183 Посмотреть сообщение
В соседней теме подсмотрел немного другой вариант кода, но так вообще ничего не создается
Потому что здесь все новые панели никуда не добавляются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2024, 18:16
Помогаю со студенческими работами здесь

UML редактор с обновляемой кодогенерацией на php
Сейчас пользуюсь staruml для рисования диаграмм классов для моих проектов на php. Тут есть опция сгенерировать код на основании созданной...

Создание автоматизированной анкеты с обновляемой базой данных
Добрый день! нужна ваша помощь. 1 этап. Есть анкета (Лист 1) , нужно чтобы данные с этой анкеты сохранялись в отдельном листе(Лист 2),...

В круговую диаграмму TChart добавлять данные из обновляемой пользователем таблицы TStringGrid
Добрый вечер. Нужна помощь: как в круговую диаграмму TChart добавлять данные из обновляемой пользователем таблицы TStringGrid?

В flowlayoutpanel создается динамически usercontrol (смотрим картинку) задача привязать его к обновляемой коллекции
То есть,к примеру, я привяжу user control к observebalcollection(в зависиомсти от количества элементов в коллекции будет и генерация user...

Интерфейс Comparable, Интерфейс Comparator, Интерфейс List
Добрый день, прошу подсказать с решением задачи. Или натолкнуть в какую сторону нужно думать. Не могу освоить второй пункт задачи. 1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru