2013-05-31 66 views
0

我試圖創建從數據庫生成的問題的動態列表。當複選框被選中從文本框到數據庫的文本

我讓我的一個文本框和複選框中列出的問題,我想有在一個單獨的表寫入到數據庫時的複選框選中它在文本框中的文本。

我可以寫的問題到數據庫,但沒有從文本框中的答案。下面

代碼生成我的名單。

    com = new OleDbCommand("SELECT [Task] FROM Debrief_Tasks WHERE [Current] = TRUE AND [Group] = 4", Program.DB_CONNECTION); 
        datareader = com.ExecuteReader(); 

        int e = 1; 

        while (datareader.Read()) 
        { 

         try 
         { 
          string Task = datareader.GetString(0); 

          Label taskLable = new Label(); 
          taskLable.Text = Task; 
          taskLable.AutoSize = true; 
          taskLable.Anchor = AnchorStyles.Left; 
          TextBox nameTextBox = new TextBox(); 
          nameTextBox.Name = ToString(); 
          nameTextBox.AutoSize = true; 
          nameTextBox.Anchor = AnchorStyles.None; 
          nameTextBox.Padding = new Padding(1); 
          nameTextBoxes.Add(nameTextBox); 
          CheckBox completeCheckBox = new CheckBox(); 
          completeCheckBox.Name = Task.ToString(); 
          completeCheckBox.AutoSize = true; 
          completeCheckBox.Anchor = AnchorStyles.None; 
          completeCheckBox.CheckAlign = ContentAlignment.MiddleCenter; 
          completeCheckBox.Padding = new Padding(1); 
          completeCheckBox.CheckedChanged += new EventHandler(completeCheckBox_CheckedChanged); 
          completeCheckBoxes.Add(completeCheckBox); 


          tableLayoutPanel5.RowCount = e + 2; 
          tableLayoutPanel5.Controls.Add(taskLable, 0, e + 1); 
          tableLayoutPanel5.Controls.Add(nameTextBox, 1, e + 1); 
          tableLayoutPanel5.Controls.Add(completeCheckBox, 2, e + 1); 
          i++; 
         } 
         catch 
         { 
         } 
        } 
       } 
      } 
     } 
    } 

    void completeCheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox checkBox = (CheckBox)sender; 



     if (checkBox.Checked) 
     { 

      OleDbCommand com = new OleDbCommand("INSERT INTO Debrief ([Debrief_Date], [Task], [DoneName]) VALUES (?, ?, ?)", Program.DB_CONNECTION); 
      com.Parameters.Add(new OleDbParameter("", DateTime.Today.Date)); 
      com.Parameters.Add(new OleDbParameter("", Convert.ToString(checkBox.Name))); 
      com.Parameters.Add(new OleDbParameter("", ***Convert.ToString(checkBox.Name***))); 


      OleDbDataReader datareader = com.ExecuteReader(); 
     } 
     else 
     { 
     } 
    } 

我知道我的最後一個sql輸入和其他的一樣,但這是我可以運行它的唯一方法。

任何想法如何相關的文本框鏈接到複選框。

回答

0

添加Dictionary<CheckBox, TextBox>到你的代碼將舉行相關CheckBoxesTextBoxes,像這樣的引用:

創建類範圍內的字典:

Dictionary<CheckBox, TextBox> pairs = new Dictionary<CheckBox, TextBox>(); 

,並在代碼中添加代碼將每個CheckBox-TextBox對在創建後插入Dictionary

pairs.Add(completeCheckBox,nameTextBox); 

而在completeCheckBox_CheckedChanged使用CheckBox參考

TextBox associatedTextBox = null; 
pairs.TryGetValue(checkBox, out associatedTextBox); 

檢索TextBox和使用associatedTextBox.Text數據庫存儲

+0

工程處理,謝謝 –

0

你可以試試這個:

var textBoxValue = ((TextBox)checkBox.Parent 
    .Controls[checkBox.Parent.Controls.IndexOf(checkBox) - 2]).Text; 

基本上,你可以使用複選框來獲得父控件容器,然後通過使用它相對於複選框的位置來引用集合中的文本框。

注意這一個簡單的方法,只要你有一個簡單,一致的頁面設計。如果每個問題的動態結構或相對路徑太複雜,我還建議使用Nikola的方法。

0

你可以嘗試類似的,如果(checkbox.Checked)條件裏面的代碼...

OleDbCommand com = new OleDbCommand("INSERT INTO Debrief ([Debrief_Date], [Task], [DoneName]) VALUES (@Debrief_Date, @Task, @DoneName)", Program.DB_CONNECTION); 

com.Parameters.Add(new OleDbParameter("@Debrief_Date", OledbType.DateTime)).Value = DateTime.Today.Date; 
com.Parameters.Add(new OleDbParameter("@Task", OledbType.VarChar, 30)).Value = checkBox.Text; 
com.Parameters.Add(new OleDbParameter("@DoneName", OledbType.VarChar, 30)).Value = checkBox.Text; 

Program.DB_CONNECTION.Open(); 
com.ExecuteNonQuery(); 

這僅僅是一個測試代碼。只需將dbtypes和長度與數據庫中的數據對齊即可。我希望那些作品。 ;)

相關問題