当我想将控件添加到动态创建的tabpages时,我遇到了问题。我的软件是餐馆的POS系统。我的想法是先创建餐厅区域和地区有不同数量的办公桌。示例:餐馆区域有15个办公桌,咖啡馆区域有22个办公桌。在这种情况下类别和产品区域的东西有桌子。所以要做到这一点我使用tabcontrol
组件!所有tabpages
都是地区名称,标签页内容必须显示为buttons
...
所有地区和办公桌都存储在MySql
数据库中。
因此,如果选择tab_1(区域#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是错误的
答案 0 :(得分:1)
我认为之前关于按钮位置的陈述可能是个问题。尝试添加以下内容,这将更改每个按钮的位置。
int i = 0;
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);
btn.Location=new Point(100, 100+i);
desk.Add(btn);
i += 10;
}