我在C#上构建一个Form,用于在SQL Server数据库上存储数据。 我添加了一个打开的按钮,可以从PK表单中打开一个旧的保存表单。
当我点击打开时,使用showdialog
打开一个新表单,使用数据读取器读取数据库中的数据。
我在文本框中获得了正确的值, datetimepicker 工具。
但是,当我尝试在打开的表单的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:这适用于主窗体,而不是新打开的窗体,其他一切(文本框,数据网格视图,复选框)工作正常并获取值
答案 0 :(得分:0)
您可以尝试以下方法: - 添加表单焦点或活动
1)Application.OpenForms [form.Name] .Focus();
2)Application.OpenForms [form.Name] .Activate();
3)这可以在打开子页面时添加,如下所示; -
var form = new Form1();
if (Application.OpenForms[form.Name] == null)
{
form.Show();
}
else
{
Application.OpenForms[form.Name].Activate();
}
由于 Jitendra
答案 1 :(得分:0)
首先:
您是否为组合框提供了一组用户可以选择的值?如果你忘记这样做,那么你当然会得到索引-1。
如果您为组合框提供了值集,那么如果查询SelectedIndex,您仍然可以获得-1。原因是:您设置了text属性。索引> = 0仅在文本与提供的文本完全之一匹配时才会生效。它没有在MSDN上描述,但我确信这包括大写/小写匹配。
此外,您可以通过添加(自定义)对象而不是实际的字符串来创建组合框的预设列表。在这种情况下,String表示(.ToString()的输出)显示在组合框中,但我怀疑是否可以将它与Text属性中的给定String进行比较。
另一种可能性:您的数据库文本包含未显示的不可打印字符。使用字符串的Length属性检查无效数据。也许你还有前导或尾随空格,需要被Trim()删除。
但是,对于调试,您可以从组合框中选择一个条目,并使用selectedIndexChanged事件在消息框中显示信息(实际文本,所选索引......)。通过这种方式,您可能会发现数据出现故障。
这就是我对你的问题的所有想法。
修改强>
在评论中交换了足够的信息后,您会发现失败:
您的问题是您只创建了表单。 Form_load()尚未执行,因为在显示表单时会发生这种情况。因此,当您设置了组合框的名称属性时,您的组合框不包含任何数据
当您在主要表单中或作为主表单进行测试时,组合框很可能已在设置值时填充
因此,我的答案中的第一段实际上是正确的,您和我只需要找出如何以及为什么......