打开具有旧组合框值的表单

时间:2015-08-12 05:26:30

标签: c# forms winforms combobox

我在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:这适用于主窗体,而不是新打开的窗体,其他一切(文本框,数据网格视图,复选框)工作正常并获取值

2 个答案:

答案 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()尚未执行,因为在显示表单时会发生这种情况。因此,当您设置了组合框的名称属性时,您的组合框不包含任何数据 当您在主要表单中或作为主表单进行测试时,组合框很可能已在设置值时填充 因此,我的答案中的第一段实际上是正确的,您和我只需要找出如何以及为什么......