【发布时间】:2015-08-12 05:26:30
【问题描述】:
我正在 C# 上构建一个将数据存储在 SQL 服务器数据库中的表单。 我添加了一个打开按钮,让您可以从表单 PK 中打开一个旧的保存表单。
当我点击打开时,使用showdialog 打开一个新表单,使用数据阅读器读取数据库中的数据。
我在 datetimepicker 工具的 Text Boxes 中获得了正确的值。
但是,当我尝试在打开的表单的 ComboBox 中显示值时,我总是得到第一个默认值,但如果我尝试在旧表单中显示它,则值会发生变化。
dtr.GetString(1) 显示了我想要使用的正确值。
Form1 Editing_Form = new Form1();
int Result_ID_Number_int = Convert.ToInt32(Result_ID_Number);
//Retrieve the data from sql server database and load them into the new form
try
{
sc.Open();
//READ PART1 FROM DATABASE
string Get_Data_Query_1 = (" SELECT statement ");
cmd = new SqlCommand(Get_Data_Query_1, sc);
dtr = cmd.ExecuteReader();
if (dtr.Read())
{
Editing_Form.Text_Subject.Text = dtr.GetString(0);
Editing_Form.ComboBox_Organizer.Text = dtr.GetString(1);
}
dtr.Close();
sc.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
编辑
我尝试使用索引,但我仍然得到第一个值(我认为是索引 -1)
string index_test = dtr.GetString(1);
Editing_Form.ComboBox_Organizer.SelectedIndex = Editing_Form.ComboBox_Organizer.FindStringExact(index_test);
PS:这适用于主表单,而不适用于新打开的表单,其他所有内容(文本框、数据网格视图、复选框)都可以正常工作并获取值
【问题讨论】:
-
您不仅应该设置文本部分或组合框,还应该通过设置 SelectedIndex 或 SelectedItem 来选择正确的项目!事实上,当你这样做时,你可以将文本部分留给系统..
-
@TaW 我通过将字符串结果值与组合框中的所有可用列表进行比较来获取索引,当我在消息框中显示它时,我得到了正确的索引值。但是当我尝试在组合框中显示它时,我总是得到第一个值,这就是为什么我试图将它作为文本然后设置它
-
您什么时候在新打开的表单中执行此操作?也许你做得太早了? (将代码复制到按钮是一个很好的测试..)
-
@TaW 是的,我正在从我的主表单打开一个表单,它将从 sql 数据库加载旧数据(就像显示旧表单值的一种方式)。如果我在将打开新表单的按钮的主表单上使用我在编辑中添加的代码,它工作正常,但是当我更改它以修复新打开的表单中的值时,我总是得到默认值。如果我做得太早,文本框的值不应该保持不变吗?
标签: c# forms winforms combobox