2009-02-12 44 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 
相关问题