2011-01-26 39 views
5

如何在OnSelectedIndexChanged触发事件之前获取DropDownList上的前一项?如何在OnSelectedIndexChanged触发事件之前获取DropDownList上的项目

例如:我有一个DropDownList,其名称为它的项目(“John”,“Mark”)。默认情况下,SelectedIndex是“John”。在更改索引并选择“标记”后,将触发事件OnSelectedIndexChanged。当我使用ddlName.SelectedIndex时,它将只返回“Mark”的索引,我想得到的索引是“John”的索引。

回答

4

在更改之前无法捕获事件,但可以轻松地将以前的值存储在变量中。每次触发SelectedIndexChanged时,都使用先前的值,然后将其设置为新索引(在下次事件触发时)。为了处理这种情况,当它是一个新的选择时(默认情况下),你可以在页面加载时设置变量,或者允许它为空,并提醒你这是一个新的选择(然后你​​可以处理不过你喜欢)。

+0

感谢您的信息drharris。 – 2011-01-31 01:19:37

3
<asp:DropDownList ID="ddlName" runat="server" AutoPostBack="true" 
     onselectedindexchanged="ddlName_SelectedIndexChanged"> 
     <asp:ListItem Text="John" Value="1"></asp:ListItem> 
     <asp:ListItem Text="Mark" Value="2"></asp:ListItem> 
     <asp:ListItem Text="Jim" Value="3"></asp:ListItem> 
    </asp:DropDownList> 

.cs文件代码在这里:

public static int PreviousIndex; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       ddlName.AppendDataBoundItems = true; 
       ddlName.Items.Add(new ListItem("Other", "4")); 
       PreviousIndex = ddlName.SelectedIndex; 
      } 

     } 

     protected void ddlName_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string GetPreviousValue = ddlName.Items[PreviousIndex].Text; 
      Response.Write("This is Previously Selected Value"+ GetPreviousValue); 
      //Do selected change event here. 

      PreviousIndex = ddlName.SelectedIndex; 

     } 
1

你可以使用e.OldValues属性。

<asp:DropDownList ID="esDropDownList" runat="server" DataSourceID="SqlDataSourceddlEnrolmentStatus" DataTextField="EnrolmentStatusDescription" DataValueField="EnrolmentStatusID" SelectedValue='<%# Bind("StudentEnrolmentStatus") %>'> 
</asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSourceddlEnrolmentStatus" runat="server" 
ConnectionString="<%$ ConnectionStrings:ATCNTV1ConnectionString %>" SelectCommand="SELECT [EnrolmentStatusID], [EnrolmentStatusDescription] FROM [tblEnrolmentStatuses] ORDER BY [EnrolmentStatusID]"> 
</asp:SqlDataSource> 

而且在后面的代码(假设你的下拉列表是一个FormView)...

protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e) 
    { 
.. 
      String msg = "This is the new value " + e.NewValues["StudentEnrolmentStatus"].ToString()+ " and this is the old value " + e.OldValues["StudentEnrolmentStatus"].ToString(); 
.. 
    } 
相关问题