Asp.net-ドロップダウンリストの上部に空白のアイテムを追加します


128

ドロップダウンに最初に空白のアイテムが表示されないのはなぜですか?ここに私が持っているものがあります

drpList.Items.Add(New ListItem("", ""))

With drpList
    .DataSource = myController.GetList(userid)
    .DataTextField = "Name"
    .DataValueField = "ID"
    .DataBind()
End With

編集〜私はGenerig Listにバインドしていますが、これが原因かもしれませんか?


回答:


274

データバインドの後:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;

または、ListItemをインスタンス化し、そのSelectedプロパティをtrueに設定して、上記のようにdrpListに挿入することもできます。
skia.heliou

3
これは、sqlDataSourceデータを処理するための回答を探している人に役立つ 場合があります。私の場合、drpList.AppendDataBoundItems = true;も追加する必要がありました。Page_Loadメソッドで現在のデータにバインドするには
sabastienfyrre

29

を使用AppendDataBoundItems=trueして簡単に追加できます。

<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server"><br/>
    <asp:ListItem Text="" Value="" /><br/>
</asp:DropDownList>

1
VSは<br />タグが気に入らず、それなしでも動作します。これはすっきりとした選択肢で、なぜこれ以上票を持たないのかわかりません。
Tony L.

魅力のように働いた。設計時のソリューションをありがとう。
DataCat Robin 2015

3
Selected = "true"を設定することを忘れないでください
Fandango68

24

空白のリストアイテムを追加した後にデータバインディングが行われ、既存のアイテムが置き換えられます。コントローラーからリストの先頭に空白のアイテムを追加するか、データバインディングの後に追加する必要があります。

編集:

ASP.Net 2.0でこれをすばやくググると、「AppendDataBoundItems」trueプロパティが設定され、データバインドされたアイテムを追加できます。

詳細は参照してください

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281または

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx


4
注意する必要があると思うのは、同じデータを何度も追加することで、ポストバックごとにドロップダウンリストを拡大することです。
キース・サーモンズ、2008年

空白の項目はありませんか、それとも選択されていませんか?
ウィスク

これは、.aspxマークアップに空白のマークアップがあり、コードビハインドでバインドされている場合に機能します。
John Sheehan

13

最初に空白のアイテムを挿入してから、データをバインドするのが、これまでと同じように良い方法だと思います。ただしAppendDataBoundItems、リストコントロールのプロパティを設定する必要があります。

次のメソッドを使用して、任意のデータソースを任意のリストコントロールにバインドします...

public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
{
    list.Items.Clear();
    list.Items.Add("", "");
    list.AppendDataBoundItems = true;
    list.DataValueField = valueName;
    list.DataTextField = textName;
    list.DataSource = datasource;
    list.DataBind();
}

7

「Whisk」のように、トリックは「AppendDataBoundItems」プロパティにあります

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AppendDataBoundItems = true;
        DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
        DropDownList1.SelectedIndex = 0;
    }
}

ありがとう「泡立て器」


5

データバインディングを実行してから、以下を追加します。

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)

3

空白のアイテムを追加してからデータバインドを追加すると、リストが空になります。データバインド後に空白のアイテムを挿入してみてください


そうすると、空白行が一番下に表示されます。
サイフカーン、

挿入するインデックスを指定できます。JasonSのソリューションを見てください。
AndyG 2008年

@ [Saif Khan]:そしてそれがうまくいかない場合は、データソースに空白行を挿入してからデータバインドします
Steven A. Lowe


1

ddlCategory.DataSource = ds;
ddlCategory.DataTextField = "CatName";
ddlCategory.DataValueField = "CatID";

カッチ1:

ddlCategory.Items.Add(new ListItem("--please select--", "-1"));
ddlCategory.AppendDataBoundItems = true;
ddlCategory.SelectedIndex = -1;

ddlCategory.DataBind();

カッチ2:

ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));

(テスト済みOK)


0

また、コンテンツを含む選択と空白の選択を結合することもできます。

select '' value, '' name
union
select value, name from mytable

振り返ってみると、代替手段としてのみこの方法をお勧めしません。私は柔軟性のためにイベント(OnDataBound = "mydropdown_DataBound")が好きですが、現在のケースでは、単純化のために(AppendDataBoundItems = "true")を採用しています。
CINCHAPPS 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.