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 2016 년

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

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
조심해야 할 한 가지 생각은 동일한 데이터를 반복해서 추가하여 각 포스트 백 후에 드롭 다운 목록이 커지는 것입니다.
Keith Sirmons

빈 항목이 없거나 선택되지 않았습니까?
Whisk

이것은 .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"Said처럼 트릭은 "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;
    }
}

감사합니다 "Whisk"


5

데이터 바인딩을 수행 한 후 다음을 추가하십시오.

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

3

빈 항목을 추가 한 다음 데이터 바인딩을 사용하여 목록을 비우는 것처럼 보입니다. 데이터 바인딩 후 빈 항목을 삽입하십시오


그렇게하면 맨 아래에 빈 행이 나타납니다.
Saif Khan

삽입 할 인덱스를 지정할 수 있습니다. JasonS의 솔루션을보십시오.
AndyG

@ [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"));

(확인 테스트)


0

내용이있는 선택과 빈 선택을 결합 할 수도 있습니다.

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

되돌아 보면 대안으로 만이 방법을 사용하지 않는 것이 좋습니다. 유연성을 높이기위한 이벤트 (OnDataBound = "mydropdown_DataBound")가 마음에 들지만, 현재는 간단하게하기 위해 (AppendDataBoundItems = "true")를 채택하고 있습니다.
CINCHAPPS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.