0


private Hashtable myHashTable = new Hashtable();
次の方法を使用して、Hashtableのドロップダウンリスト、データベースから取得した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#

4

2 に答える 2

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();

        }
    }
}

これがお役に立てば幸いです...幸せなコーディング...

于 2012-04-30T07:10:01.583 に答える
0

DataTextFieldとのDataValueField値は、それぞれバインディング ソースのプロパティに対応する必要があります。コードは、少なくとも "key" という名前のプロパティと別の "value" という名前のプロパティを持つオブジェクトのコレクションを想定しています。これは当てはまらないため、バインドされるアイテムはありません。

編集:このコードはまったくテストさていませんが、LINQ を使用してデータセットを匿名コレクションに投影できるはずです。

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

次に、使用しているバインディングが機能するはずです。

于 2012-04-30T06:10:25.537 に答える