从哈希表中填充下拉列表

时间:2012-04-30 06:06:44

标签: c# asp.net collections

我正在尝试从Hashtable填充下拉列表,HashTable键和&从数据库中提取的值,private Hashtable myHashTable = new Hashtable();
使用以下方法:

void LoadmyHashTable()
{

    bussinessObject bs = new bussinessObject();
    myDataset ds = new myDataset();
    ds = bs.GetPosType(-1);

    int rowsCount = ds.myTable.Rows.Count;
    for (int i = 0; i < rowsCount; i++)
    {
     myHashTable.Add(ds.myTable.Rows[i]["dTypeName"],ds.myTable.Rows[i]["dTypeId"] );

    }
}

然后,在调用页面load()中的方法后,尝试使用hashTable值填充下拉列表:

        myDropdownlist.DataSource = myHashTable;
        myDropdownlist.DataTextField = "key";
        myDropdownlist.DataValueField = "value";
        myDropdownlist.DataBind();


问题我的下拉列表显示为空! 提前致谢。
ASP.NET,C#

2 个答案:

答案 0 :(得分:1)

我修改了以下代码,请尝试一下。

void LoadmyHashTable()
{

    bussinessObject bs = new bussinessObject();
    DataSet ds = new DataSet();
    ds = bs.GetPosType(-1);      
    if (ds.Tables.Count > 0 )
    {
        for (int i = 0; i < ds.Tables[0].Rows.Count-1; i++)
        {
            myHashTable.Add(ds.Tables[0].Rows[i]["dTypeId"], ds.Tables[0].Rows[i]["dTypeName"]);

        }
    }

}

使用代码进行页面加载,如下所示

protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        LoadmyHashTable();
        if (myHashTable.Count > 0)
        {
            myDropdownlist.DataSource = myHashTable;
            myDropdownlist.DataTextField = "Value";
            myDropdownlist.DataValueField = "Key";
            myDropdownlist.DataBind();

        }
    }
}

希望这会帮助你......快乐的编码...

答案 1 :(得分:0)

每个DataTextFieldDataValueField值都需要与绑定源中的属性相对应。您的代码假定一组对象至少具有名为“key”的属性,另一个名为“value”。由于事实并非如此,因此不会绑定任何项目。

编辑:此代码尚未经过的测试,但您应该能够使用LINQ将数据集投影到匿名集合中:

var myHashTable = ds.myTable.Rows.Select( row => new { key = row["dTypeName"], value = row["dTypeId"] } );

然后你正在使用的绑定应该可以工作。