2013-11-14 97 views
1

我已經創建了Labels,CheckBoxes ...... 但我希望CheckBox值爲0或1,用於'on'或'off'後檢查到sql server中。 ... 我怎麼能?動態創建複選框並插入到數據庫中

protected void EventDuration_DDL_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     con.Open(); 
     DateTime dt = DateTime.Parse(StartDate_TB.Text); 

     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 = dt.AddDays(i); 
      NewLabel.Text = eventDate.ToLongDateString(); 

      CheckBox newcheck = new CheckBox(); 
      newcheck.ID = "CheckBox" + i; 
      newcheck.AutoPostBack = true; 
      newcheck.CausesValidation = false; 
      newcheck.CheckedChanged += new EventHandler(newcheck_CheckedChanged); 
      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/>")); 
     } 

     con.Close(); 
    } 

    void newcheck_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox currentCheckbox = sender as CheckBox; 
     string extractInteger = Regex.Match(currentCheckbox.ID, @"\d+").Value; 
     Label currentlabel = (Label)Labeldiv.FindControl("Label" + extractInteger); 
     con.Open(); 

     int n = Int32.Parse(EventDuration_DDL.SelectedItem.ToString()); 
     for (int i = 0; i < n; i++) 
     { 
      SqlCommand cmd = new SqlCommand("insert into EventDays(EventDay,EventStatus)values(@EventDay,@EventStatus)", con); 
      cmd.Parameters.AddWithValue("@EventDay", currentlabel.Text); 
      cmd.Parameters.AddWithValue("@EventStatus", currentCheckbox.Checked ? "true" : "false"); 
      cmd.ExecuteNonQuery(); 

     } 
     con.Close(); 
    } 

複選框必須創建一個基於DDL選擇....如果我們選擇6,然後6個複選框必須創建,之後,當我們選中該複選框,則值必須存儲到SQL服務器... 。

值沒有保存到SQL Server中......

+0

現在,我注意到,這鱈魚e看起來很奇怪......複選框的目的是什麼?你永遠不會給他們一個被實際檢查的機會(流程是:創建複選框 - >讀取複選框 - >寫入數據庫)。結果總是「關閉」(或0)。 – Alex

+0

你在哪裏聲明'CheckBox_CheckedChanged'中調用的'cmd2'?因爲它看起來像是在for循環中聲明瞭一個** new **'cmd2',它只是for循環的本地對象 – freefaller

+0

Post edit ...您現在正在更新for循環中的每個循環的cmd2參數-循環。這意味着在最後,只有最後一個項目將被保存。 – freefaller

回答

0

假設EventStatus是一個數字列,我能想到的最懶的解決方案

cmd2.Parameters.AddWithValue("@EventStatus", newcheck.Checked ? 1 : 0); 
+0

它總是隻顯示'0' – THOR

+0

@ user2971566:即使它檢查了? –

+0

我已經爲問題本身添加了一條評論 – Alex