如何根据不断变化的数据动态加载和排序按钮控件

本文关键字:加载 动态 排序 控件 按钮 数据 何根 变化 | 更新日期: 2023-09-27 18:33:19

所以我有一个数据库'餐厅',有一个表格'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 个按钮后继续新行。

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

任何积极的支持将不胜感激。

提前谢谢大家。

如何根据不断变化的数据动态加载和排序按钮控件

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

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

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

       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++;
        }

或者干脆

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) });

Sayka 的答案是最好的答案,当涉及到使用纯代码而不使用其他控件来生成一个公式时,该公式可以正确对齐 5 个按钮并在它们之后换行。

但是,我

个人发现flowlayoutpanel是我的最佳选择,因为滚动功能可以帮助我摆脱输入页面的麻烦。