2014-01-24 137 views
1

我在許多文件中有許多下拉列表。我試圖編寫一個函數,在每次頁面加載時只顯示「---請選擇 - 」作爲默認項目 - 在回發後無法選擇它,因此將其添加到數據庫中,也不會添加到列表中作爲新物品,。我不知道如何實現這一點。而是我使用插入(我知道是錯誤的),但我不知道哪個是正確的方式來實現這一點。請指教在下拉列表中顯示不可選的值

ASPX

<asp:DropDownList ID="DropDownListVType" runat="server" DataSourceID="SqlDataSourceVesselType" 
DataTextField="Vessel_Type" DataValueField="VType_ID" Width="160px" AutoPostBack="False" 
    CausesValidation="True" OnDataBound="ddl_DataBound"> 

CS ....

PublicFunctions pubvar = new PublicFunctions(); 

protected void ddl_DataBound(object sender, System.EventArgs e) 
    { 
      pubvar.ddl_DB(DropDownListVType); 


    } 

公共職能CS

public void ddl_DB(DropDownList d) 
{ 
    try 
    { 
     d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty)); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("{0} Exception caught.", ex); 
    } 

} 

UPDATE: 公共職能CS

public object checkNull (Control c) 
    { 
    try{ 

     if (c.GetType()==typeof(TextBox)) 
     { 
      TextBox tb = c as TextBox; 

     if (!string.IsNullOrEmpty(tb.Text)) 
      { 
       return tb.Text; 
      } 

     } 

     if(c.GetType()==typeof(DropDownList)) 
     { 
      DropDownList dl = c as DropDownList; 

      if ((!string.IsNullOrEmpty(c.?? 
      { 
       return c.??? 
      } 

     } 
    } 

    catch (Exception ex) 
    { 
     Console.WriteLine("{0} Exception caught.", ex); 
    } 
    return (DBNull.Value); 

CALL頁面CS

 command.Parameters.AddWithValue("@VType_ID", DropDownListVType.SelectedValue); 
+0

爲什麼會插入方法是不正確的?你究竟在哪裏遇到麻煩? – Vogel612

+0

每次頁面發回時,---請選擇---作爲下拉列表中的新項目添加 – New2This

+0

檢查它是否事先存在然後... – Vogel612

回答

1

好吧......當你插入你的默認選項索引0你可以做以下事情:

if(!d.Items[0].Text.equals("--- Please Select ---")) 
    d.Items.Insert("--- Please Select ---"); 

否則什麼都不做。或@Plue提到:

if(!Page.IsPostBack) 
    d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty)); 

Additionaly你應該移動到"--- Please Select ---"恆定。

private const string DEFAULTOPTION = "--- Please Select ---"; 
+0

OP的主要問題是使第一個元素不可選 – Plue

+0

@plue你確定嗎? – Vogel612

+0

標題:在下拉列表中顯示無法選擇的值 – Plue

0

如果你總是有一個「---請選擇---」選項或作爲默認值類似的東西。你總是可以忽略每個下拉列表中的第一個ListItem。

myDropDown_OnSelectedIndexChanged(...){ 

    if(myDropDown.SelectedIndex != 0){ 

    //Do stuff, make database changes, etc 

    } 

}

如果目標是絕不允許選擇這種控制,像這樣:

try 
{ 
    if(!IsPostBack){ 
     ListItem defaultOption = new ListItem("---Please Select---", String.Empty); 
     d.Items.Insert(0, defaultOption); 
     defaultOption.Attributes.Add("disabled", "disabled"); 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("{0} Exception caught.", ex); 
} 
+0

的 - 請選擇 - 不能存儲在任何索引的數據庫。這是假設? – New2This

+0

我上面做了一些修改^ – njenson

1

嘗試增加此爲ASPX:

<asp:DropDownList ... AppendDataBoundItems="true"> 
    <asp:ListItem Text="-Choose car-" disabled="true"/> 
</asp:DropDownList> 

默認將顯示- 選擇小車 -。然後,當用戶點擊ddl時,該選項將不可選。

並且不要在代碼後面插入任何東西。

編輯

如果你每次回傳結合,嘗試添加這對您的ddl_DB代碼:

d.Items.Insert(0, new ListItem("--- Please Select ---", String.Empty)); 
d.Items[0].Attributes.Add("disabled", "disabled"); 
+0

我有其他領域的驗證。如果我在輸入任何內容之前單擊保存,那麼驗證的字段會出現相應的錯誤,但是我在頁面上的下拉列表中的值自動默認爲各個列表中的第一項,而不是顯示--please select - 再次 – New2This

+0

您是否將數據與每個回發綁定? – Plue

+0

是的。每次回發都會綁定數據 – New2This