如何根据更改的数据动态加载和排序按钮控件?

时间:2014-12-06 22:15:05

标签: c# winforms runtime controls

所以我有一个数据库'Restaurant',带有'dining_tables'表。

在我的C#应用​​程序中,我试图计算'dining_tables'表中的表数量,然后为每个表创建一个按钮,并动态地将它们放在表单上,​​并排放置,并按行放置。

  • 每行5个按钮。 (不知道如何在每5个按钮后有效地按下按钮)

这就是我从数据库中获取表格的方法:

(SQL是我为简化sql任务而制作的一个类)

SqlDataReader dr = SQL.queryExec("SELECT * FROM tables");
while(dr.Read()){
var tblName = dr["tbl_Name"];
}

^现在我正在提取每个表的名称,我已经完成了以下操作。

1)创建一个按钮,对其进行样式设置,并将当前的“tblName”应用于按钮的text属性。 2)将按钮添加到表单。

我现在停留的是找出如何在每个tbl_Name的表单上垂直对齐按钮,然后在每5个按钮后继续新行。

注意:我打算稍后通过添加页面来改进这一点,但是现在我想知道如何完成上述操作。

非常感谢任何积极的支持。

提前谢谢大家。

4 个答案:

答案 0 :(得分:0)

您是否尝试过使用flowLayoutPanel? 它是一个控制面板,它将自动对齐并定位其中的所有控件,它在属性FlowDirection中有4个方向,尝试使用它,我认为你只需要使用这个配置

flowLayoutPanel.FlowDirection = FlowDirection.LeftToRight;
flowLayoutPanel.WrapContents = true;

你只需要计算5个按钮的宽度,加上它的magin然后将其设置为flowLayoutPanel的宽度

答案 1 :(得分:0)

       SqlDataReader dr = SQL.queryExec("SELECT * FROM tables");            
       int i = 0;
        while (dr.Read())
        {
            Button btn = new Button();
            btn.Text = dr["tbl_Name"].ToString();
            btn.Width = 100;
            btn.Height = 50;
            btn.Left = (i % 5) * 110;
            btn.Top = (i / 5) * 60;
            Controls.Add(btn);
            i++;
        }

答案 2 :(得分:0)

或者只是

SqlDataReader dr = SQL.queryExec("SELECT * FROM tables");
int i = 0;
while (dr.Read())Controls.Add(new Button() {Text = dr["tbl_Name"].ToString(), 
Size = new Size(100, 50), Location = new Point(i % 5 *110, i++ / 5 * 60) });

答案 3 :(得分:0)

Sayka的答案是最好的,当使用纯代码而没有其他控件来生成一个公式,可以正确对齐5个按钮和后面的换行符。

但是,我个人发现flowlayoutpanel对我来说是最好的选择,因为Scroll功能可以帮助我避免输入页面。