2009-02-12 97 views
3

假設我有兩個項目的下拉菜單,默認情況下,第一個項目被選中。如果我選擇點擊下拉菜單中的第一項,是否有一種方法可以讓selectedIndexChanged事件仍然觸發?如果在下拉菜單中選擇了Item,SelectedIndexChanged事件不會觸發?

例如,我可以通過將Dropdown的SelectedIndex設置爲-1來實現嗎?

那麼沒有工作,哈哈,因爲它不顯示當前選定的值,所以它是誤導。

我有一個問題是,下拉列表用於排序。我有排序半工作,如果我選擇第二個項目,例如,它將按升序排序,但如果我想現在使用第二個項目降序排序,我必須選擇另一個項目,然後返回到第二個項目。

即使我添加選擇依據...我認爲要排序的最佳解決方法就是有像下拉多個項目:

排序號(ASC)

排序號(說明)

排序字母(ASC)

排序字母(商品說明)

謝謝, XaiSoft

+0

我想我可能會誤解,但這聽起來像是根據您從下拉列表中選擇的內容來求助於您的下拉列表?或者,您是否正在使用您的下拉列表中的選擇來對其他一些項目進行排序? – TheTXI 2009-02-12 16:12:32

+0

我正在使用下拉列表中的選擇對列表框中的項目進行排序。 – Xaisoft 2009-02-12 16:14:11

+0

好的,我想我會做出另一個答案,而不是與我以前的搞砸。 – TheTXI 2009-02-12 16:15:18

回答

1

注:這是基於的更新內容題。

比方說,你有一個下拉列表和一個列表框(dropdownlist1和ListBox1中)

你可以設置你的初始下拉列表中的Page_Load事件,例如:

dropdownlist1.items.insert(0, "----Select Sort Method----") 
dropdownlist1.items.insert(1, new ListItem("Alphabetic Ascending", "AlphaAsc")) 
dropdownlist1.items.insert(2, new ListItem("Alphabetic Descending", "AlphaDesc")) 
dropdownlist1.items.insert(3, new ListItem("Numeric Ascending", "NumAsc")) 
dropdownlist1.items.insert(4, new ListItem("Numeric Descending", "NumDesc")) 
dropdownlist1.selectedindex = 0 

然後在你的dropdownlist1.selectedindexchanged事件你會處理它是這樣:

if dropdownlist1.selectedindex <> 0 then 
    select case dropdownlist1.selectedvalue 
     case "AlphaAsc" 
      Insert Code to Sort ListBox1 Alphabetically in ascending order 
     case "AlphaDesc" 
      Insert Code to sort ListBox1 Alphabetically in descending order 
     case "NumAsc" 
      Insert code to sort ListBox1 Numerically in ascending order 
     case "NumDesc" 
      Insert code to sort ListBox1 Numerically in descending order 
    end select 
end if 

注意:您會想要確保你dropdownlist1的的AutoPostBack prope如果您希望在選擇某個項目時立即執行排序,則rty設置爲true。

2

只是出於好奇,你的第一個項目應該是一個可選項目,或者是像「選擇下面的東西」?因爲您實際上可以將您的下拉菜單的文本值設置爲上述報價,並且它不會是可選項目,所以無論他們選擇什麼,selectedindexchanged始終會首先觸發。

否則,你就必須做這樣的事情:

DropDownList1.Items.Insert(0, "Select an Item") 
     DropDownList1.SelectedIndex = 0 

你已經綁定的控件後。

編輯補充

其實,我與我的下拉菜單中執行此操作:

var a = new AddressesBLL(); 
     cmbPersonAddress1.DataSource = a.GetAddresses(); 
     cmbPersonAddress1.DataBind(); 


     //Set the default text to the below text but don't let it be part of the selections on the drop down. 
     cmbPersonAddress1.Text = "Please select an existing address..."; 

不使「請選擇一個現有的地址......」的被選擇項目。當您公開ddl時,第一個可選項目是第一個地址,因此selectedindexchanged將始終激活。

+0

那麼,現在我有兩個選項都可以選擇。第一個是默認選擇的。 – Xaisoft 2009-02-12 15:35:59

+0

我還沒有嘗試過你的代碼,但是我所做的是試圖將SelectedIndex設置爲-1,正如我在問題中提到的那樣,但是即使在選擇了第二個項目後,它仍然只顯示第一個項目。 – Xaisoft 2009-02-12 15:38:46

6

不幸的是:只有當用戶將選擇從一個項目更改爲另一個項目時,該事件纔會觸發。

您可能會考慮將文字「請選擇...」添加到列表頂部。

2

就像之前說過的那樣,添加第一項文本以指導用戶從列表中選擇一個項目。

如果您是數據綁定項目,則需要之後插入項目。

Dropdownlist1.datasource = whatever 
Dropdownlist1.datatextfield = "Something" 
dropdownlist1.datavaluefield = "ValueField" 
dropdownlist1.databind 
dropdownlist1.items.insert(0, "----Select Something!----") 
dropdownlist1.selectedindex = 0 

,然後在SelectedIndexChanged事件時,可以通過包裝所有的代碼中的if語句防止在第一項行動:

If DropDownList1.SelectedIndex <> 0 then 
    Do Your Work 
End If 
相關問題