【问题标题】:How to dinamycally create runtime controls in asp.net/webforms c#?如何在 asp.net/webforms c# 中动态创建运行时控件?
【发布时间】:2019-12-06 12:34:07
【问题描述】:

我在数据库中有一个具有这种结构的表:

  • field_order

  • field_label

  • 字段名称

  • field_type

  • 宽度

  • 身高

我想遍历所有行并在我的页面中创建控件,将它们放在经典表中 2 列 x X 行(每行一个控件)。

这是服务器端代码:

 using (MySqlConnection db = new MySqlConnection(myAppConnectionString))
            {
                string sql = "SELECT * FROM myTable WHERE idtemplate =" + templateID.ToString() + " ORDER BY field_order";
                MySqlDataReader dr;
                MySqlCommand cmd = new MySqlCommand(sql,db);

                db.Open();

                dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        string field_label = dr["field_label"].ToString();
                        string field_name  = dr["field_name"].ToString();
                        string field_type = dr["field_type"].ToString();
                        string field_width = dr["width"].ToString();
                        string field_height = dr["height"].ToString();

                        switch (field_type)
                        {
                            case "Text":
                                Label lbl = new Label();
                                lbl.Text = field_label;
                                lbl.ID = "lbl" + field_name;
                                panelFields.Controls.Add(lbl);

                                TextBox txt = new TextBox();
                                txt.Text = "";
                                txt.ID = "txt" + field_name;
                                Unit ut = new Unit(field_width);
                                txt.Width = ut;
                                ut = new Unit(field_height);
                                txt.Height = ut;
                                panelFields.Controls.Add(txt);


                                break;
                            case "Number":
                                break;
                            case "Date":
                                break;
                            case "Time":
                                break;
                        }
                    }
                }

            }

使用panelFields.Controls.Add(myControl) 我将每个控件添加到面板中,但彼此相邻。

所以我的问题是:

1- 如何在 2 列 x N 行的表中添加控件?

2- 如果我以这种方式添加控件,我是否可以从服务器端访问以保存 TextBox 值?

谢谢

【问题讨论】:

  • 你似乎知道#1,然后#2 也是。您需要使用带有 ID 的myPanel.FindControl
  • 另外,<asp:PlaceHolder> 是动态添加控件的好元素。参考:docs.microsoft.com/en-us/dotnet/api/…

标签: c# asp.net webforms


【解决方案1】:

我解决了使用 HTML 标记向 myPanel 添加“文字”控件的问题。

喜欢:

myPanel.Controls.Add(new LiteralControl(""));

myPanel.Controls.Add(new LiteralControl(" "));

....

myPanel.Controls.Add(new LiteralControl(""));

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多