C# 如何将字符串转换为Dropdownlist?

C# 如何将字符串转换为Dropdownlist?,c#,C#,我每天有7个小时的下拉列表 我决定创建一个小代码,在一周的最后一天迭代枚举并追加,而不是为每个下拉列表键入datasource、textfield和valuefield 但是,我遇到了一个错误:无法将“System.String”类型的对象强制转换为“System.Web.UI.WebControls.DropDownList”类型 行dropdownlistrtimefrom.DataSource=timesavable;在运行时不显示任何错误 enum Days { Sunday =

我每天有7个小时的下拉列表

我决定创建一个小代码,在一周的最后一天迭代枚举并追加,而不是为每个下拉列表键入datasource、textfield和valuefield

但是,我遇到了一个错误:无法将“System.String”类型的对象强制转换为“System.Web.UI.WebControls.DropDownList”类型

行dropdownlistrtimefrom.DataSource=timesavable;在运行时不显示任何错误

enum Days
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 3,
    Wednesday = 4,
    Thursday = 5,
    Friday = 6
}
protected void Page_Load(object sender, EventArgs e)
{        
    foreach (Days day in Enum.GetValues(typeof(Days)))
    {
        object strTimeFrom = "ddlTimeFrom" + day;
        object strTimeTo = "ddlTimeTo" + day;

        ((DropDownList)strTimeFrom).DataSource = TimesAvailable();
        ((DropDownList)strTimeFrom).DataTextField = "Value";
        ((DropDownList)strTimeFrom).DataValueField = "Key";
        ((DropDownList)strTimeFrom).DataBind();
    }
}

protected List<KeyValuePair<int, string>> TimesAvailable()
{
    List<KeyValuePair<int, string>> lstTime = new List<KeyValuePair<int, string>>();
    lstTime.Add(new KeyValuePair<int, string>(-1, "--Select Time---"));

    for (int intCnt = 1; intCnt <= 12; intCnt++)
    {
        lstTime.Add(new KeyValuePair<int, string>(intCnt, intCnt.ToString()));
    }

    return lstTime;
}

您不能将字符串转换为下拉列表。非常简单

strTimeFrom是一个字符串,我假定它是控件的名称,因此您不能将它强制转换为dropdownlist

您需要获取该控件的实例,既然您知道它的名称,就可以使用FindControl

var strTimeFrom = (DropDownList)Page.FindControl("ddlTimeFrom" + day);

您在运行时得到这个结果是因为您试图将字符串转换为DropDownList。您可能认为将strTimeFrom声明为对象,并附加日期名称以获得实际的DropDownList是可行的,但事实并非如此。一天结束时,strTimeFrom/To是字符串,不能将其转换为DropDownList

在您的情况下,应该将这些变量声明为字符串,然后重试

var list = Page.FindControl(strTimeFrom) as DropDownList;
list.DataSource = TimesAvailable();
list.DataTextField = "Value";
list.DataValueField = "Key";
list.DataBind();
作为一项规则,您不应该将变量声明为对象,特别是如果由于装箱开销而确实需要内部类型。C是一种强类型语言;你需要更具体一些


将变量声明为对象只是为了让代码编译,这对我来说意味着你需要更多地阅读C基础知识。

我就是这么做的:dropdownlistrtimefrom.DataSource=timesavaailableobject strTimeFrom=ddletimefrom+day;这个对象是一个字符串。如果你试图把它投给一个下拉列表,它会失败。为什么人们会否决这个家伙?没有从字符串到DropDownList的隐式转换!他是对的,你是对的。我使用object进行测试,看看它在最一般的情况下是否有效。var strTimeFrom=DropDownListPage.findcontrolddletimefrom+day;除非文件是用户控件,否则将正常工作。谢谢大家的快速回复。是的,但是您一定知道strTimeFrom和strTimeTo将是字符串-因为您在声明中为它们指定了字符串literal+day。或者您没有意识到这一点,并认为您正在为strTimeFrom分配一个实际控件?无论哪种方式,我的朋友都不会使用强类型语言。是的,我知道这是一个字符串,但错误的是,试图用Dropdown来转换它是错误的方式。