33

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

そのため、コード ビハインドに ListItem のリストを設定している DropDownList があります。新しい ListItem はそれぞれ、intellisense が提供するドキュメントによると、そのテキストと値に対応する 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 テキスト) に設定する理由を説明してもらえますか?

あーっ!! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg

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

4

5 に答える 5

66

こんにちは(何にでも)データバインディングするときは、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();
于 2009-08-12T11:43:21.057 に答える
11

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

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

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

于 2009-08-12T11:45:05.530 に答える
7

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

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

次に、ASPX ページに次のように入力します。

<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
于 2009-08-12T11:50:52.320 に答える
5

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

List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
于 2012-07-25T07:39:54.657 に答える
5

listitem をドロップダウンに直接追加することもできます..

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);
        }
于 2009-08-12T11:54:08.117 に答える