У меня проблема, когда я хочу добавить элементы управления в динамически созданные вкладки. Мое программное обеспечение - это система POS для ресторанов. Моя идея состоит в том, чтобы сначала создать регионы ресторанов, а регионы имеют различное количество столов. Пример: в регионе для столовой имеется 15 столов, в зоне кафе - 22 столовых. Что-то вроде категории и продуктов, в этом случае в регионах есть столы. Поэтому для этого я использую компонент tabcontrol
! Все tabpages
- название региона и содержимое страницы должны быть представлены как buttons
...C# winforms добавить элементы управления к динамически созданным вкладкам
Все регионы и парты хранятся в базе данных MySql
.
Так что если tab_1 (Region # 1) выбрано в качестве контура содержимого всех столов buttons
на странице.
Мой код все время возвращения только один стол, но у меня есть 10 столов для области 1 ..
Код для листинга регионов:
private void RegionList()
{
try
{
using (var conn = new MySqlConnection(Properties.Settings.Default["connectionstring"].ToString()))
{
conn.Open();
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM regions";
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
TabPage tabPage = new TabPage();
string name = reader["name"].ToString();
int id = Convert.ToInt32(reader["id"]);
tabPage.Name = "tab_" + id;
tabPage.Text = name;
foreach (var desk in DeskList(id))
{
tabPage.Controls.Add(desk);
}
tabControl1.TabPages.Add(tabPage);
}
reader.Close();
}
conn.Close();
};
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
А вот код для перечисления парты на конкретный регион :
private List<Button> DeskList(int regionID)
{
List<Button> desks = new List<Button>();
try
{
using (var conn = new MySqlConnection(Properties.Settings.Default["connectionstring"].ToString()))
{
conn.Open();
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM desks WHERE region_id = @id";
cmd.Parameters.AddWithValue("id", regionID);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Button btn = new Button();
string name = reader["name"].ToString();
btn.Text = name;
btn.Name = "desk_" + reader["id"];
btn.Size = new Size(100, 60);
desk.Add(btn);
}
reader.Close();
};
conn.Close();
};
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return desks;
}
Так что, когда я зацикливаю это, я получаю только во всех регионах только 1 стол, но правильный результат. Все регионы имеют минимум 10 столов. Что я делаю неправильно? Maybie мой appoarch ошибочен
Вполне возможно, что все объекты Button создаются на UI, но они, вероятно, все укладываются друг на друга, потому что не место установлен на что-либо (если вызывающий 'DeskList' не все это делает) –
Does DeskList (id) возвращает список из 10 элементов? – hellogoodnight
Да проблема находится на месте. Кнопки просто сложены теперь, когда я добавляю работу на месте хорошо – Ivan