C# 从哈希表填充dropdownlist

C# 从哈希表填充dropdownlist,c#,asp.net,collections,C#,Asp.net,Collections,我试图从哈希表中填充一个下拉列表,即从数据库中提取的哈希表键和值,private Hashtable myHashTable=new Hashtable() 使用以下方法: void LoadmyHashTable() { bussinessObject bs = new bussinessObject(); myDataset ds = new myDataset(); ds = bs.GetPosType(-1); int rowsCount = ds.m

我试图从哈希表中填充一个下拉列表,即从数据库中提取的哈希表键和值,
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"] );

    }
}

我的下拉列表显示为空时出现问题! 提前谢谢。

ASP.NET、C#

DataTextField
DataValueField
值需要分别对应于绑定源中的一个属性。您的代码假定一组对象至少有一个名为“key”的属性和另一个名为“value”的属性。因为这不是真的,所以没有项目被绑定

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

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

那么您使用的绑定应该可以工作。

我有如下修改代码,请尝试

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"]);

        }
    }

}

希望这将帮助您…愉快地编码…

您仍然使用非通用集合的原因是什么?您是否出于某种原因实际使用了.NET 1.1?可能是@JonSkeet的副本,谢谢。。如果您能提供最好的解决方案,我将不胜感激。@Salahaldin:不知道要求就很难回答问题。您真的需要它与.NET1.1一起工作吗?我想不出你想要使用哈希表的任何其他原因,但它显然限制了答案。@JonSkeet,事实上不是,我正在使用.NET 3.5。你是否检查过哈希表是否有这些项??,是的。但dropdownlist却没有。
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();

        }
    }
}