【问题标题】:Dynamic creation of ASP Calendar controlsASP日历控件的动态创建
【发布时间】:2013-11-16 07:09:43
【问题描述】:

根据从数据库返回的数据,使用以下代码将一些文本框和复选框动态添加到我的页面:

int counter = 0;

foreach (DataRow dr in dsData.Tables[0].Rows){
    CheckBox chk_valid = new CheckBox();
    chk_valid.Enabled = true;
    chk_valid.ID = "dynamicchk" + counter.ToString();

    TextBox txt_task = new TextBox();
    txt_task.Enabled = true;
    txt_task.Text = dr[0].ToString();
    txt_task.Width = 300;
    txt_task.TextMode = TextBoxMode.MultiLine;
    txt_task.ID = "dynamictask" + counter.ToString();

    TextBox txt_id = new TextBox();
    txt_id.Enabled = true;
    txt_id.Text = "ID.";
    txt_id.Width = 90;
    txt_id.ID = "dynamicid" + counter.ToString();

    TextBox txt_email = new TextBox();
    txt_email.Enabled = true;
    txt_email.Text = "E-mail Address";
    txt_email.Width = 150;
    txt_email.ID = "dynamicemail" + counter.ToString();

    dynamic_controls_holder.Controls.Add(chk_valid);
    dynamic_controls_holder.Controls.Add(new LiteralControl("   "));
    dynamic_controls_holder.Controls.Add(txt_task);
    dynamic_controls_holder.Controls.Add(new LiteralControl("   "));
    dynamic_controls_holder.Controls.Add(txt_id);
    dynamic_controls_holder.Controls.Add(new LiteralControl("   "));
    dynamic_controls_holder.Controls.Add(txt_email);
    dynamic_controls_holder.Controls.Add(new LiteralControl("<br /><br />"));

    counter += 1;
}

现在,我还需要动态添加日历控件(在每一行的文本框和复选框前面应该有一个按钮;单击该按钮时,应该显示一个日历。从日历中选择一个日期时,文本框值应更改为所选日期。)

通常,如果我使用 jQuery UI,这会很容易,但我的限制是在我工作的环境中,我不能使用 jQuery UI 或任何其他 ajax 日历。我必须使用 asp:calendar。

【问题讨论】:

    标签: c# asp.net .net calendar


    【解决方案1】:

    要回答您的问题,您应该在用户控件中设计日历、文本框、按钮等功能。然后在您的循环中,您只需通过简单的 LoadControl("~/MyControl.ascx") 调用将该控件添加到动态控件中。

    要更进一步,您应该考虑使用 asp:Repeater 控件。它可以完成您现在手动执行的所有操作:循环数据和创建动态控件。这样做会花费更少的精力,因为您实际上可以使用 ASPX 设计器将行设计为模板,而不是编写大量代码。

    【讨论】:

    • 好的,我试试这个。但是告诉我,假设我在自定义用户控件中包含一个复选框、一个文本框和一个日历控件。假设我在我的页面上放置了十个这样的自定义控件。我可以参考每个控件的各个复选框吗?我怎么能做到这一点??
    • 您必须根据 OOP 原则正确设计您的用户控件。用户控件将访问它自己的嵌套控件(复选框、文本框等),但外部世界不会。您的用户控件应该向外界公开易于处理的属性。以 Textbox 控件为例:您不知道它在内部做了什么(创建 元素等),但您可以轻松访问它的 Text 属性。
    • 我想知道复选框是否被选中。使用几个自定义用户控件可以实现吗?
    • 您可以在用户控件中公开一个属性: public bool IsChecked { get { return checkbox1.Checked;这样,外部世界可以轻松访问此属性,而在您的控件中,您可以轻松访问 checkbox1 或任何名称,因为您在设计器中制作了此控件。
    • 非常感谢,fejesjoco!
    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2019-10-30
    相关资源
    最近更新 更多