如何根据不断变化的数据动态加载和排序按钮控件
本文关键字:加载 动态 排序 控件 按钮 数据 何根 变化 | 更新日期: 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是我的最佳选择,因为滚动功能可以帮助我摆脱输入页面的麻烦。