当复选框被选中时,右文本从文本框到数据库
本文关键字:文本 数据库 复选框 | 更新日期: 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>
,它将保存对相关CheckBoxes
和TextBoxes
的引用,如下所示:
在类范围内创建字典:
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;)