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入力が他のものと同じであることは知っていますが、これが実行できる唯一の方法です。

関連するテキストボックスをチェックボックスにリンクする方法についてのアイデア。

4

3 に答える 3

0

関連するおよびDictionary<CheckBox, TextBox>への参照を保持する a をコードに追加します。次のようになります。CheckBoxesTextBoxes

クラス スコープ内に辞書を作成します。

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

Dictionaryコードに、CheckBox-TextBox の各ペアを両方とも作成した後に挿入するコードを追加します。

pairs.Add(completeCheckBox,nameTextBox);

そして、参照を使用してcompleteCheckBox_CheckedChanged取得しますTextBoxCheckBox

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

associatedTextBox.Textデータベースの保存に使用

于 2013-05-31T08:29:22.350 に答える
0

これを試すことができます:

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

基本的に、チェックボックスを使用して親コントロール コンテナーを取得し、チェックボックスに対する相対位置を使用して、コレクション内のテキスト ボックスを参照します。

シンプルで一貫したページ デザインを使用している限り、これは簡単なアプローチであることに注意してください。質問ごとに動的な構造がある場合、または相対パスが複雑すぎる場合は、Nikola のアプローチを使用することもお勧めします。

于 2013-05-31T08:29:33.437 に答える
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 と長さをデータベースにあるものに合わせるだけです。それがうまくいくことを願っています。;)

于 2013-05-31T08:30:34.873 に答える