DropDownList没有显示任何值,尽管看起来已填充

本文关键字:看起来 填充 显示 任何值 DropDownList | 更新日期: 2023-09-27 18:00:55

我正在从XML文档中读取一个设置,将其转换为字符串数组,然后循环遍历每个字符串并将它们添加到DropDownList中。所有看起来都很好,直到我真正去看DropDownList本身。无论我做什么,DropDownList都是空的,即使当我调试代码时,一切似乎都在完美地添加。如果有人能解释一下为什么从代码的角度来看,它正在被填充,但什么都没有显示,我将不胜感激

我的代码可以在下面找到(请注意,我也尝试过通过数据绑定填充它,但我仍然有同样的问题。(:

public class InstrumentDropDownList : DropDownList
{
   public InstrumentDropDownList()
    {
        PopulateDropDown();
    }
    public void PopulateDropDown()
    {
        string unsplitList = Fabric.SettingsProvider.ReadSetting<string>("Setting.Location");
        string[] instrumentList = unsplitList.Split(',');
        DropDownList instrumentsDropDown = new DropDownList();
        if (instrumentList.Length > 0)
        {
            foreach (string instrument in instrumentList)
            {
                instrumentsDropDown.Items.Add(instrument);
            }
        }
    }
}   

DropDownList没有显示任何值,尽管看起来已填充

您正在创建一个新的DropDownList并向其中添加项目。问题是,您没有对创建的新DropDown列表执行任何操作。您只是将项目添加到了错误的列表中。

    public void PopulateDropDown()
    {
        string unsplitList = Fabric.SettingsProvider.ReadSetting<string>("Setting.Location");
        string[] instrumentList = unsplitList.Split(',');
        if (instrumentList.Length > 0)
        {
            foreach (string instrument in instrumentList)
            {
                this.Items.Add(instrument);
            }
        }
    }

作为一种选择,你也应该能够做到这一点。您显然想要进行更多的验证,但这只是为了表明您可以使用DataSource/DataBind

public void PopulateDropDown()
{
    this.DataSource = fabric.SettingsProvider.ReadSetting<string>("Setting.Location").Split(',');
    this.DataBind();
}

从同一个类继承时,为什么要创建DropDownList的新实例。你不应该做这样的事吗。基础Items.Add((??

您需要在foreach语句之后调用instrumentsDropDown.DataBind。。

public class InstrumentDropDownList : DropDownList
{
   public InstrumentDropDownList()
    {
        PopulateDropDown();
    }
    public void PopulateDropDown()
    {
        string unsplitList = Fabric.SettingsProvider.ReadSetting<string>("Setting.Location");
        string[] instrumentList = unsplitList.Split(',');
        DropDownList instrumentsDropDown = new DropDownList();
        if (instrumentList.Length > 0)
        {
            foreach (string instrument in instrumentList)
            {
                instrumentsDropDown.Items.Add(instrument);
            }
            instrumentsDropDown.DataBind();
        }
    }
}