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