当复选框被选中时,文本框中的文本到数据库

时间:2013-05-31 08:19:17

标签: c#

我正在尝试创建一个从数据库生成的动态问题列表。

我通过文本框和复选框列出了我的问题,我希望在选中复选框时将文本框中的文本写入数据库的单独表格中。

我可以将问题写入数据库,但文本框中没有答案。

下面的代码会生成我的列表。

                    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输入与另一个相同,但这是我可以让它运行的唯一方法。

如何将相关文本框链接到复选框。

3 个答案:

答案 0 :(得分:0)

在您的代码中添加Dictionary<CheckBox, TextBox>,其中包含对相关CheckBoxesTextBoxes的引用,如下所示:

在类范围内创建字典:

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

并在代码中添加代码,在创建它们之后将每个CheckBox-TextBox对插入Dictionary

pairs.Add(completeCheckBox,nameTextBox);

completeCheckBox_CheckedChanged中使用TextBox引用检索CheckBox

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

并使用associatedTextBox.Text进行数据库存储

答案 1 :(得分:0)

你可以试试这个:

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

基本上,您可以使用复选框获取父控件容器,然后使用它与复选框的相对位置来引用集合中的文本框。

请注意,只要您拥有简单一致的页面设计,这就是一种简单的方法。如果每个问题都有动态结构或相对路径太复杂,我还建议使用Nikola的方法。

答案 2 :(得分:0)

你可以在if(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和长度与数据库中的数据对齐即可。我希望有效。 ;)