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

本文关键字:文本 数据库 复选框 | 更新日期: 2023-09-27 18:16:07

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

我得到我的问题与文本框和复选框列出,我想有从文本框写入数据库在一个单独的表中的文本当复选框选中。

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

下面的代码生成我的列表。
                    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输入是相同的,但这是唯一的方法,我可以让它运行。

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

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

在代码中添加一个Dictionary<CheckBox, TextBox>,它将保存对相关CheckBoxesTextBoxes的引用,如下所示:

在类范围内创建字典:

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

,并在代码中添加代码,将每个CheckBox-TextBox对插入到Dictionary后,他们都创建:

pairs.Add(completeCheckBox,nameTextBox);

completeCheckBox_CheckedChanged中使用CheckBox引用检索TextBox

TextBox associatedTextBox = null;
pairs.TryGetValue(checkBox, out associatedTextBox);
使用associatedTextBox.Text存储

你可以试试:

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

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

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

你可以在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和长度与数据库中的内容对齐即可。我希望这能奏效。div;)