C#:从组合框到下拉列表的问题

本文关键字:下拉列表 问题 组合 | 更新日期: 2023-09-27 17:58:31

我对编程还很陌生,我相信我的问题会显示出来。在过去的两天里,我完全陷入了困境,我在任何地方都找不到答案。可能是因为我忽略了一些显而易见的事情,没有人会问,但事实是:

我在VS Express 2013中为windows制作了一个应用程序,用户可以从只显示对象名称的组合框中选择一个替代选项。从选择中,我将整个对象发送到我的"转换器类"。

        EU = new Converter("Enriched Uranium", "44");
        CO = new Converter("Coolant", "9832");
        BI = new Converter("Biocells", "2329");
        CB = new Converter("Construction Blocks", "3828");
        FR = new Converter("Fertilizer", "3693");
        GL = new Converter("Genetically Enhanced Livestock", "15317");
        object[] myArray1 = { EU, CO, BI, CB, FR, GL };
        comboBox1.DisplayMember = "name";

节目中大约有50个这样的节目。第一部分是名称,另一部分是XML用来查找内容的ID。他们在代码中进一步执行了很多内容,但这是开始:

        Converter a = ((Converter)comboBox1.SelectedItem);
        a.CallXml();
        a.taxPrice(comboBox2.Text);
        a.getNumber(textBox4.Text);
        a.getTax(taxrat);

等等……我知道它并不完全漂亮,我看到了很多方法,让它在学习后更有效。但现在我专注于将整个东西转换为一个网站,并使用VSExpress2013进行web。

那里没有组合框,所以我一直在使用下拉列表。上面用"AddRange"加载列表的方法没有起作用,并且ive trid大约有一百个东西,直到我最终以这种方式显示名称:

        List<object> myList1 = new List<object>();
        myList1.Add(EU);
        myList1.Add(CO);
        myList1.Add(BI);
        DropDownList2.DataSource = myList1;          
        DropDownList2.DataTextField = "name";
        DropDownList2.DataBind();

到目前为止一切都很好!我现在完全陷入困境的地方是,我需要用户选择返回对象并将其发送到"Converter"类。这是我感觉到的结束:

    protected void Button1_Click(object sender, EventArgs e)
    {
        object a = (Converter)DropDownList2.SelectedItem; 
    }

上面写着:"无法将类型blablabla转换为WebApplication4.Converter。怎么会这样?有什么方法可以让它执行与旧winform中的combobox相同的操作吗?

我想做的是,当用户选择"浓缩铀"时,程序会调用"Converter类",例如:

        EU.CallXml();

等等。

C#:从组合框到下拉列表的问题

欢迎来到web开发和整个无状态请求/响应机制的世界。要充分理解这一点,请阅读windows和web开发之间的差异。

在webforms中,控件比winforms的控件基本得多。实际上,绑定只是一种方式——它只是使用源数据来获取绘制列表所需的信息。如果你仔细想想,它必须是这样的,否则它将不得不在服务器和客户端浏览器之间传递整个对象列表,这将是浪费,而且在无状态环境中很难知道何时绑定等。

Web表单Dropdownlist.SelectedItem的类型为ListBoxItem,它只包含绘制和从Dropdownlist控件获取项目所需的最小字段,只包含ListItem中的文本,以及是否选中它。这就是为什么你不能把它投射回你的转换器对象。

那么,如何将所选项目映射回您的转换器?您可以使用字符串值Dropdownloadist.SelectedItem.value进行某种查找,也可以使用Dropdownloadist.FelectedIndex在该索引处从源列表中查找项目。

你可以做一些类似的事情

List<Converter> myList1 = GetConverters(); //todo - write a method to make the list    
DropDownList2.DataSource = myList1;          
DropDownList2.DataTextField = "name";
DropDownList2.DataBind();

以及点击事件

protected void Button1_Click(object sender, EventArgs e)
{
   string s = DropDownList2.SelectedItem.Value; 
   Converter c = GetConverters().Find(x => x.name == s);
   //do whatever with the converter
}

免责声明-这些都没有经过编译-因此可能会有一些错误。此外,这绝对不是最好的方法(没有错误检查+只为进行数据源绑定而列出转换器列表有点浪费),只是为了向您展示如何做到这一点。

另一个警告-确保只进行一次数据源绑定-如果您在没有检查页面是否已返回的情况下进行绑定,则可能会在尝试获取值之前进行绑定-这意味着第一个值似乎总是被选中的。祝你好运