C#winforms将控件添加到动态创建的标签页

时间:2017-02-17 15:21:04

标签: c# mysql winforms tabcontrol

当我想将控件添加到动态创建的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是错误的

1 个答案:

答案 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;
        }