web-dev-qa-db-ja.com

ListItemのASP.NET ListをDropDownListにデータバインドする問題

別の(論理的な)方法で作業することを期待していたこの奇妙なことに出会ったばかりですが、そうではありません。それはバグですか、それとも「機能」ですか?

そのため、コードビハインドにListItemのリストを設定するDropDownListがあります。新しい各ListItemは、インテリセンスが提供するドキュメントに従って、そのテキストと値に対応する2つの引数を取得します。

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();

ここで、ListItem.TextをTextとして、ListItem.ValueをValueとして使用するのではなく、データバインドされたDropDownListがTextとValueの両方をまったく同じ(ListItemテキスト)に設定する理由を誰かに説明できますか?

ARGH !! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

それとも私は何か間違ったことをしていますか?

30
Farinha

こんにちは(何かに)データバインドする場合、DropDownListのDataTextFieldとDataValueFieldを設定する必要があります。あなたの場合、次のコードを使用する必要があります

List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
    users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataTextField = "Text";
ddlPrimaryContact.DataValueField = "Value";
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();
58
Matthew Dresser

ドロップダウンリストを次のようにバインドする必要があります。

ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();

私が知る限り、データバインドされたコントロールは、データソースコレクションの各アイテムに対してToStringメソッドを呼び出すことにより、テキストと値(上記のように提供されていない場合)を取得する理由を尋ねます。したがって、コレクションの各ListItemは、ToStringメソッドによってTextプロパティを返します。

9
Canavar

または、この方法でバインドすることもできます。 (FullName(su.FirstName + "" + su.LastNameを返す)というSubscriptionOnlyプロパティにreadOnlyプロパティを追加できると仮定します。

ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();

次に、ASPXページに以下を入力します。

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
6
davewasthere

リストアイテムをドロップダウンに直接追加することもできます。

List<ListItem> users = new List<ListItem>();
        for (int count = 0; count < 10; count++)
        {
            ListItem li = new ListItem("List " + count.ToString(), count.ToString());
            ddl.Items.Add(li);
        }
5
Muhammad Akhtar

ListItemアイテムをDropDownListに追加し、.NETがListItemのテキストをDropDownListのテキストと自動的に一致させる方法があります。Valueについても同じです。

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
5
Farinha