2011-07-08 9 views
21

I zbindowanych mój DDL do mojej bazy danych, jak poniżej, ale w jaki sposób mogę dodać domyślny tekst na górze zbindowanych wartości tak, że wydaje się jako:Dodawanie wartość domyślną w dropdownlist po związaniu z bazy

Select Color ---> default text 
Red ---> database value 
Blue ---> database value 
Green ---> database value 

Kod:

DropDownList ddlSize = (DropDownList)FormView_Product.Row.Cells[0].FindControl("ddlSize"); 
    CommerceEntities db = new CommerceEntities(); 

    ddlColor.DataSource = from p in db.ProductTypes 
             where p.ProductID == pID 
             orderby p.Color 
             select new { p.Color }; 
    ddlColor.DataTextField = "Color"; 

Dzięki!

Odpowiedz

37

Po związaniu danych, wykonaj następujące czynności:

ddlColor.Items.Insert(0, new ListItem("Select","NA")); //updated code 

Albo śledzić drugą propozycję Briana, jeśli chcesz to zrobić w znacznikach.

Powinieneś prawdopodobnie dodać kontrolkę RequiredFieldValidator i ustawić jej InitialValue na "NA".

<asp:RequiredFieldValidator .. ControlToValidate="ddlColor" InitialValue="NA" /> 
13

Można to zrobić programowo:

ddlColor.DataSource = from p in db.ProductTypes 
            where p.ProductID == pID 
            orderby p.Color 
            select new { p.Color }; 
ddlColor.DataTextField = "Color"; 
ddlColor.DataBind(); 
ddlColor.Items.Insert(0, new ListItem("Select", "NA")); 

Albo dodać go w znacznikach jak:

<asp:DropDownList .. AppendDataBoundItems="true"> 
    <Items> 
     <asp:ListItem Text="Select" Value="" /> 
    </Items> 
</asp:DropDownList> 
+0

Twój kod programistyczny nie sprawi, że "Wybierz" item defult lub top poz. Będzie po prostu na dole listy i zostanie wybrany pierwszy element z listy, chyba że w innym przypadku ustawi "SelectedValue". Zobacz moją odpowiedź dla szczegółów. –

+0

Tak, dziękuję @Justin. Wstaw zamiast tego metoda wstawiania. –

+0

Cool. Jeśli potrzebujesz tylko pustego tekstu i wartości jako wartości domyślnej, nie musisz nawet dodawać żadnych elementów listy. AppendDataBoundItems = "True" wykona pracę. Dzięki! –

4

Można go dodawać programowo lub w znacznikach, ale jeśli dodać go programowo, zamiast Add element, należy Insert jako pozycję zero, tak aby była to pierwsza pozycja:

ddlColor.DataSource = from p in db.ProductTypes 
         where p.ProductID == pID 
         orderby p.Color 
         select new { p.Color }; 
ddlColor.DataTextField = "Color"; 
ddlColor.DataBind(); 
ddlColor.Items.Insert(0, new ListItem("Select Color", ""); 

Oczekuje się, że pozycja domyślna będzie pierwszą pozycją na liście. Jeśli po prostu Add to, będzie on na dole i nie będzie domyślnie wybrany.

0

Rozwiązanie dostarczone przez Justina powinno działać. Dla pewności korzystanie z właściwości SelectedIndex również pomoże.

ddlColor.DataSource = from p in db.ProductTypes 
         where p.ProductID == pID 
         orderby p.Color 
         select new { p.Color }; 

ddlColor.DataTextField = "Color"; 
ddlColor.DataBind(); 

ddlColor.Items.Insert(0, new ListItem("Select Color", ""); 
ddlColor.SelectedIndex = 0; 
2

projekt

<asp:DropDownList ID="ddlArea" DataSourceID="ldsArea" runat="server" ondatabound="ddlArea_DataBound" /> 

codebehind

protected void ddlArea_DataBound(object sender, EventArgs e) 
{ 
    ddlArea.Items.Insert(0, new ListItem("--Select--", "0")); 
} 
Powiązane problemy