使用旧的组合框值打开窗体

本文关键字:开窗 窗体 组合 | 更新日期: 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