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

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

10.05.2024, 17:27. Показов 474. Ответов 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
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
10.05.2024, 18:02
Цитата Сообщение от rkmy183 Посмотреть сообщение
для каждого ряда создается панель и все элементы ровно на том же месте.
Ну так вы им сами прописываете одни и те же координаты.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3412 / 2733 / 575
Регистрация: 04.09.2018
Сообщений: 8,574
Записей в блоге: 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
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
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 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru