В настоящее время я работаю с приложением Windows Forms и хочу динамически создать форму, которая создает GroupBox в зависимости от категорий и продуктов.У меня есть две таблицы, например:
+-------------------------------+
| Category |
+-------------------------------+
| CategoryId (UNIQUEIDENTIFIER) |
| Name (VARCHAR(255)) |
| CreatedBy(VARCHAR(255)) |
| CreationDate(DATETIME) |
+-------------------------------+
+-----------------------------+
| Product |
+-----------------------------+
| ProductId(UNIQUEIDENTIFIER) |
| CategoryId (FK) |
| Name(VARCHAR(255)) |
| CreatedBy(VARCHAR(255)) |
| CreationDate(DATETIME) |
| IsDeleted(BOOL) |
+-----------------------------+
Например, если у меня есть категория Fruit
, а ее продукты Banana
и Apple
, но у меня есть еще одна категория, названная Vegetables
, и ее продукты Avocado
и Tomato
вроде:
+--------------------------------------+---------------------+-------------------------+------------------------+
| CategoryId (UNIQUEIDENTIFIER) | Name (VARCHAR(255)) | CreatedBy(VARCHAR(255)) | CreationDate(DATETIME) |
+--------------------------------------+---------------------+-------------------------+------------------------+
| CEF50872-B8E7-4EA0-A3D7-00048FFC82DA | Fruit | Test | 10/11/2018 |
| 646B5A64-EA28-4471-8964-0017EB511797 | Vegetables | Test | 10/12/2018 |
+--------------------------------------+---------------------+-------------------------+------------------------+
+--------------------------------------+--------------------------------------+---------+-------------------------+------------------------+
| ProductId(UNIQUEIDENTIFIER) | CategoryId (FK) | Name | CreatedBy(VARCHAR(255)) | CreationDate(DATETIME) |
+--------------------------------------+--------------------------------------+---------+-------------------------+------------------------+
| D81EFF8C-9B8D-48C9-9CC7-0015B2787D4A | CEF50872-B8E7-4EA0-A3D7-00048FFC82DA | Banana | Test | 10/11/2018 |
| 7683554C-5E46-40FE-9285-001E8CD67740 | CEF50872-B8E7-4EA0-A3D7-00048FFC82DA | Apple | Test | 10/11/2018 |
| 614FBE96-6355-4C3B-985B-002E2B9853CB | 646B5A64-EA28-4471-8964-0017EB511797 | Avocado | Test | 10/11/2018 |
| 74352B1B-36E8-4913-898E-002ED4CB21AD | 646B5A64-EA28-4471-8964-0017EB511797 | Tomato | Test | 10/11/2018 |
+--------------------------------------+--------------------------------------+---------+-------------------------+------------------------+
Когда я получаю эту информацию в c#
из хранимой процедуры, такой как
SELECT * FROM Category AS c
INNER JOIN Product AS P ON C.CategoryId = P.CategoryId
Итак, я хочу создать groupbox
динамически.Как я могу создать это groupbox
в зависимости от категорий и их продуктов?С уважением
В финале я хочу что-то вроде этого: ![enter image description here](https://i.stack.imgur.com/fyiLV.png)
Обновление
Я пытаюсь, как комментарии ниже, как:
Получение данных из таблицы данных:
var data = db.GetTableBySQL("usp_RedMarks_Get");
foreach (DataRow itm in data.Rows)
{
if (itm["CategoryName"].ToString() != CurrentGroupBoxName)
{
flpRedMarks.Controls.Add(GetGroupBox(itm, 200, 100));
}
}
Создание GroupBox и элементов:
private GroupBox GetGroupBox(DataRow c, int width, int height)
{
GroupBox currentGroupBox = new GroupBox();
currentGroupBox.Size = new Size(width, height);
currentGroupBox.Text = c["CategoryName"].ToString();
currentGroupBox.Name = c["CategoryName"].ToString();
CurrentGroupBoxName = currentGroupBox.Name;
var y = 20;
foreach (var itm in c.Table.Rows)
{
CheckBox cb = new CheckBox();
cb.Text = itm.ToString();
cb.Location = new Point(5, y);
// you can add an event here...
//cb.CheckedChanged += cb_SomeEvent;
currentGroupBox.Controls.Add(cb);
y += 20;
}
return currentGroupBox;
}
Я получаю данные из SQL как:
![enter image description here](https://i.stack.imgur.com/qWlwg.png)
Но вместо того, чтобы получать товары (товары) по категориям, я получаю объединенные данные: ![enter image description here](https://i.stack.imgur.com/7jqXr.png)
Что я делаю не так?Привет