我怎么保存动态创建的标签和复选框值到SQL Server [英] how I save dynamically created Labels and Checkboxes values into sql server

查看:98
本文介绍了我怎么保存动态创建的标签和复选框值到SQL Server的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何保存动态创建的标签和复选框值到SQL Server

 保护无效EventDuration_DDL_SelectedIndexChanged(对象发件人,EventArgs的发送)
    {
        INT N = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());        的for(int i = 0; I< N;我++)
        {            标签NewLabel =新的Label();
            NewLabel.ID =标签+我;
            变种EVENTDATE = Calendar1.SelectedDate.Date.AddDays(ⅰ);
            NewLabel.Text = eventDate.ToLongDateString();            复选框newcheck =新的复选框();
            newcheck.ID =复选框+我;            this.Labeldiv.Controls.Add(新LiteralControl(&下;跨度类='h1size'>中));
            this.Labeldiv.Controls.Add(NewLabel);
            this.Labeldiv.Controls.Add(新LiteralControl(&下; /跨度>中));
            this.Labeldiv.Controls.Add(新LiteralControl(< D​​IV CLASS ='使开关右拉式数据上='信息'>中));
            this.Labeldiv.Controls.Add(newcheck);
            this.Labeldiv.Controls.Add(新LiteralControl(< / DIV>中));
            this.Labeldiv.Controls.Add(新LiteralControl(< BR />中));
        }
    } 保护无效Wizard1_FinishButtonClick(对象发件人,WizardNavigationEventArgs E)
    {
        con.Open();
        CMD1的SqlCommand =新的SqlCommand(插入事件(事件名称,起始日期,EventDuration,开始时间,结束时间,SlotDuration)输出inserted.EventId值(@事件名称,起始日期@,@ EventDuration,@开始时间,结束时间@,@ SlotDuration),CON );
        cmd1.Parameters.AddWithValue(@事件名称,EventName_TB.Text);
        cmd1.Parameters.AddWithValue(@起始日期,StartDate_TB.Text);
        cmd1.Parameters.AddWithValue(@ EventDuration,EventDuration_DDL.Text);
        cmd1.Parameters.AddWithValue(@开始时间,StartTime_DDL.Text);
        cmd1.Parameters.AddWithValue(@结束时间,EndTime_DDL.Text);
        cmd1.Parameters.AddWithValue(@ SlotDuration,SlotDuration_DDL.Text);
        INT32 ID =(Int32)已cmd1.ExecuteScalar();        VAR标签= Labeldiv.FindControl(标签1)作为标签;
        VAR复选框= Labeldiv.FindControl(CheckBox1)的复选框;
        使用(的SqlCommand CMD2 =新的SqlCommand(插入EventDays(EventDay,EventStatus)值(@ EventDay,@ EventStatus),CON))
        {
             INT N = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());             的for(int i = 0; I< N;我++)
             {
                 VAR paramDay = cmd2.Parameters.Add(@ EventDay,SqlDbType.DateTime);
                 VAR paramStatus = cmd2.Parameters.Add(@ EventStatus,SqlDbType.Int);                     paramDay.Value = label.Text;
                     paramStatus.Value = checkbox.Checked? 1:0;
                     cmd2.ExecuteNonQuery();             }
        }
        con.Close();
    }

我在EventDuration_DDL_SelectedIndexChanged创建的标签和复选框动态。

现在我想将这些值到SQL Server保存Wizard1_FinishButtonClick。

我如何保存动态创建的标签和复选框值到SQL Server





..


解决方案

您必须重新创建这些动态创建的标签和复选框的按钮,单击为好,因为当用户单击Finish按钮,导致后回服务器和页面重新创建,但不执行动态标签和复选框逻辑,因此你的数据库中保存的逻辑无法找到这些控制。

我建议将您的动态标签和复选框创建逻辑到一个单独的方法,可以由被称为 EventDuration_DDL_SelectedIndexChanged() Wizard1_FinishButtonClick() ,就像这样:

 私人无效BuildDynamicControls()
{
    INT N = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());    的for(int i = 0; I< N;我++)
    {
        标签NewLabel =新的Label();
        NewLabel.ID =标签+我;
        变种EVENTDATE = Calendar1.SelectedDate.Date.AddDays(ⅰ);
        NewLabel.Text = eventDate.ToLongDateString();        复选框newcheck =新的复选框();
        newcheck.ID =复选框+我;        this.Labeldiv.Controls.Add(新LiteralControl(&下;跨度类='h1size'>中));
        this.Labeldiv.Controls.Add(NewLabel);
        this.Labeldiv.Controls.Add(新LiteralControl(&下; /跨度>中));
        this.Labeldiv.Controls.Add(新LiteralControl(< D​​IV CLASS ='使开关右拉式数据上='信息'>中));
        this.Labeldiv.Controls.Add(newcheck);
        this.Labeldiv.Controls.Add(新LiteralControl(< / DIV>中));
        this.Labeldiv.Controls.Add(新LiteralControl(< BR />中));
    }
}

现在在你的事件处理程序,你可以调用此方法,如:

 保护无效EventDuration_DDL_SelectedIndexChanged(对象发件人,EventArgs的发送)
{
    BuildDynamicControls();
}保护无效Wizard1_FinishButtonClick(对象发件人,WizardNavigationEventArgs E)
{
    BuildDynamicControls();
}


另外,你可以叫 BuildDynamicControls()的Page_Load 。这需要照顾其他按钮的页面上破坏值时,它们会导致回发,如:

 保护无效的Page_Load(对象发件人,EventArgs的发送)
{
    //在这里做其他网页加载逻辑    BuildDynamicControls();
}


  

请注意:如果你走这条路,那么你就不会需要调用 BuildDynamicControls() EventDuration_DDL_SelectedIndexChanged() Wizard1_FinishButtonClick()方法,因为的Page_Load 无论是在页面生命周期的事件之前发生。


how I save dynamically created Labels and Checkboxes values into sql server

 protected void EventDuration_DDL_SelectedIndexChanged(object sender, EventArgs e)
    {
        int n = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());

        for (int i = 0; i < n; i++)
        {

            Label NewLabel = new Label();
            NewLabel.ID = "Label" + i;
            var eventDate = Calendar1.SelectedDate.Date.AddDays(i);
            NewLabel.Text = eventDate.ToLongDateString();

            CheckBox newcheck = new CheckBox();
            newcheck.ID = "CheckBox" + i;

            this.Labeldiv.Controls.Add(new LiteralControl("<span class='h1size'>"));
            this.Labeldiv.Controls.Add(NewLabel);
            this.Labeldiv.Controls.Add(new LiteralControl("</span>"));
            this.Labeldiv.Controls.Add(new LiteralControl("<div class='make-switch pull-right' data-on='info'>"));
            this.Labeldiv.Controls.Add(newcheck);
            this.Labeldiv.Controls.Add(new LiteralControl("</div>"));
            this.Labeldiv.Controls.Add(new LiteralControl("<br/>"));
        }  
    }

 protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
    {
        con.Open();
        SqlCommand cmd1 = new SqlCommand("insert into Event(EventName,StartDate,EventDuration,StartTime,EndTime,SlotDuration) output inserted.EventId values(@EventName,@StartDate,@EventDuration,@StartTime,@EndTime,@SlotDuration)", con);
        cmd1.Parameters.AddWithValue("@EventName", EventName_TB.Text);
        cmd1.Parameters.AddWithValue("@StartDate", StartDate_TB.Text);
        cmd1.Parameters.AddWithValue("@EventDuration", EventDuration_DDL.Text);
        cmd1.Parameters.AddWithValue("@StartTime", StartTime_DDL.Text);
        cmd1.Parameters.AddWithValue("@EndTime", EndTime_DDL.Text);
        cmd1.Parameters.AddWithValue("@SlotDuration", SlotDuration_DDL.Text);
        Int32 id = (Int32)cmd1.ExecuteScalar();

        var label = Labeldiv.FindControl("Label1") as Label;
        var checkbox = Labeldiv.FindControl("CheckBox1") as CheckBox;
        using (SqlCommand cmd2 = new SqlCommand("insert into EventDays(EventDay,EventStatus)values(@EventDay,@EventStatus)", con))
        {
             int n = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());

             for (int i = 0; i < n; i++)
             {
                 var paramDay = cmd2.Parameters.Add("@EventDay", SqlDbType.DateTime);
                 var paramStatus = cmd2.Parameters.Add("@EventStatus", SqlDbType.Int);

                     paramDay.Value = label.Text;
                     paramStatus.Value = checkbox.Checked ? 1 : 0;
                     cmd2.ExecuteNonQuery();

             }
        }
        con.Close();  
    }

I have created Labels and CheckBoxes dynamically in EventDuration_DDL_SelectedIndexChanged.

now I want to save these values into sql server in Wizard1_FinishButtonClick.

how I save dynamically created Labels and Checkboxes values into sql server

. . . . ..

解决方案

You have to recreate those dynamically created labels and check boxes for the button click as well, because when the user clicks the finish button, that causes a post back to the server and the page is recreated, but the dynamic label and check box logic is not executed, thus your database saving logic cannot "find" these controls.

I recommend moving your dynamic label and check box creation logic to a separate method that can be called by the EventDuration_DDL_SelectedIndexChanged() and Wizard1_FinishButtonClick(), like this:

private void BuildDynamicControls()
{
    int n = Int32.Parse(EventDuration_DDL.SelectedItem.ToString());

    for (int i = 0; i < n; i++)
    {
        Label NewLabel = new Label();
        NewLabel.ID = "Label" + i;
        var eventDate = Calendar1.SelectedDate.Date.AddDays(i);
        NewLabel.Text = eventDate.ToLongDateString();

        CheckBox newcheck = new CheckBox();
        newcheck.ID = "CheckBox" + i;

        this.Labeldiv.Controls.Add(new LiteralControl("<span class='h1size'>"));
        this.Labeldiv.Controls.Add(NewLabel);
        this.Labeldiv.Controls.Add(new LiteralControl("</span>"));
        this.Labeldiv.Controls.Add(new LiteralControl("<div class='make-switch pull-right' data-on='info'>"));
        this.Labeldiv.Controls.Add(newcheck);
        this.Labeldiv.Controls.Add(new LiteralControl("</div>"));
        this.Labeldiv.Controls.Add(new LiteralControl("<br/>"));
    }  
}

Now in your event handlers, you can call this method, like this:

protected void EventDuration_DDL_SelectedIndexChanged(object sender, EventArgs e)
{
    BuildDynamicControls();
}

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
    BuildDynamicControls();
}


Alternatively, you can call BuildDynamicControls() in the Page_Load. This takes care of other buttons on the page destroying the values when they cause a post back, like this:

protected void Page_Load(object sender, EventArgs e)
{
    // Do other page load logic here

    BuildDynamicControls();
}

Note: If you go this route, then you will not need to call BuildDynamicControls() in the EventDuration_DDL_SelectedIndexChanged() or Wizard1_FinishButtonClick() methods, because the Page_Load happens before either of those events in the page life-cycle.

这篇关于我怎么保存动态创建的标签和复选框值到SQL Server的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆