【问题标题】:When checkbox is checked right text from text box to database当复选框被选中时,从文本框到数据库的正确文本
【发布时间】:2013-05-31 08:19:17
【问题描述】:

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

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

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

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

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

关于如何将相关文本框链接到复选框的任何想法。

【问题讨论】:

    标签: c#


    【解决方案1】:

    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 进行数据库存储

    【讨论】:

      【解决方案2】:

      你可以试试这个:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-05
          • 1970-01-01
          • 2022-01-02
          相关资源
          最近更新 更多