【问题标题】:populate dropdownlist from hashtable从哈希表填充下拉列表
【发布时间】:2012-04-30 06:06:44
【问题描述】:

我正在尝试从 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#

【问题讨论】:

  • 您仍在使用非泛型集合的任何原因?出于某种原因,您实际上是在使用 .NET 1.1 吗?
  • @JonSkeet,谢谢。如果您能提供最佳解决方案,我将不胜感激。
  • @Salahaldin:在不知道要求的情况下很难回答问题。您真的需要它与 .NET 1.1 一起使用吗?我想不出您想要使用 Hashtable 的任何其他原因,但它显然限制了答案。
  • @JonSkeet,实际上不,我正在使用 .NET 3.5。

标签: c# asp.net collections


【解决方案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();

        }
    }
}

希望这对您有所帮助...祝您编码愉快...

【讨论】:

  • 您是否检查过您的哈希表是否有项目??
  • ,是的。但它没有下拉列表。
【解决方案2】:

DataTextFieldDataValueField 值需要分别对应绑定源中的一个属性。您的代码假定一组对象至少具有一个名为“key”的属性和另一个名为“value”的属性。由于这不正确,因此没有任何项目被绑定。

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

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

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

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2022-01-11
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多