2011-01-26 20 views
5

¿Cómo obtendré el elemento anterior en DropDownList antes de OnSelectedIndexChanged desencadena el evento?Cómo obtener el elemento anterior en DropDownList antes de OnSelectedIndexChanged desencadena el evento

Ejemplo: Tengo un DropDownList que tiene nombres como sus elementos ("John", "Mark"). Por defecto, el SelectedIndex es "John". Al cambiar su índice y seleccionar "Marcar" se activará el evento OnSelectedIndexChanged. Cuando uso ddlName.SelectedIndex, devolveré solo el índice de "Marca" que quiero obtener es el índice de "Juan".

Respuesta

4

No puede capturar un evento antes del cambio, pero puede almacenar fácilmente el valor anterior en una variable. Cada vez que se activa SelectedIndexChanged, use el valor anterior y luego configúrelo en el nuevo índice (para la próxima vez que se desate el evento). Para manejar el caso cuando se trata de una nueva selección (del valor predeterminado), puede establecer la variable cuando se carga la página, o dejar que sea nula, y eso lo alerta al hecho de que es una nueva selección (que luego puede manejar como sea que te guste).

+0

Gracias por la información drharris. –

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 código del archivo aquí:

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

Usted podría utilizar la propiedad 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> 

Y en código detrás (asumiendo que su lista desplegable está en una 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(); 
.. 
    } 
Cuestiones relacionadas