estoy recibiendo este error cuando intento seleccionar un elemento del cuadro de lista desplegable «Puede tener varios elementos seleccionados en un DropDownList». Por favor alguien puede ayudarme no estoy seguro de por qué estoy haciendo esto. aquí está mi código:

private void Bind_GridView()
{
this.BindGroupNameList(DropDownList1);
}

 private void GetGroupNameList(DropDownList DropDownList1)
    {
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        SqlConnection con2 = new SqlConnection(strConnString);
        SqlDataAdapter sda = new SqlDataAdapter();
        SqlCommand cmd1 = new SqlCommand("select distinct Name" +
                        " from MyTable");

        cmd1.Connection = con2;
        con2.Open();

        DropDownList1.DataSource = cmd1.ExecuteReader();
        DropDownList1.DataTextField = "Name";
        DropDownList1.DataValueField = "Name";
        DropDownList1.DataBind();
        con2.Close();
        DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString())
                .Selected = true;
    }

   //on item change
    protected void NameChanged(object sender, EventArgs e)
    {
        DropDownList DropDownList1 = (DropDownList)sender;
        ViewState["MyFilter"] = DropDownList1.SelectedValue;
        this.Bind_GridView();
    }

y aquí está mi dropdownbox en aspx

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="NameChanged"
                        DataTextField="Name" DataValueField="Name" 
                        AppendDataBoundItems="true">
                        <asp:ListItem Text="ALL" Value="ALL"></asp:ListItem>
                        <asp:ListItem Text="Top 10" Value="10"></asp:ListItem>
                    </asp:DropDownList>

Aquí está el código para la carga de la página:

protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {

            ViewState["MyFilter"] = "ALL";
            this.Bind_GridView();


        }

}

aquí es el método que llama a GetGroupNameList:

 private void Bind_GridView()
    {
        DataTable dt = new DataTable();
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        SqlConnection con = new SqlConnection(strConnString);
        SqlDataAdapter sda = new SqlDataAdapter();
        SqlCommand cmd = new SqlCommand("sp_filter_Names");
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@MyFilter", ViewState["MyFilter"].ToString());
        cmd.Connection = con;
        sda.SelectCommand = cmd;
        sda.Fill(dt);
        GV_Test.DataSource = dt;
        GV_Test.DataBind();
        GetGroupNameList();

    }
  • ¿hay algún código en el page_load si sí, entonces pl. post que demasiado.
  • Ratina, he añadido el código para la carga de la página. thnx
  • así que no hay problema, agregue una línea en GetGroupNameList(DropDownList DropDownList1) antes de DropDownList1.Elementos.FindByValue(ViewState[«MyFilter»].ToString()) .Seleccionado = true; insertar este–> DropDownList1.selectedIndex=-1;
  • añadido pero sigue el mismo problema.
  • Quien le dijo a usted que usted puede seleccionar varios elementos en DropDownList? DropDownList es un cuadro combinado, en el que sólo se puede seleccionar un elemento para la selección múltiple tienes que utilizar ListBox o similares de control. Incluso estoy sorprendido de ver que todo el mundo está sugiriendo una respuesta aquí.
InformationsquelleAutor moe | 2013-04-17

5 Comentarios

  1. 12

    Cambiar esta línea:

    DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString())
                  .Selected = true;

    a este:

    DropDownList1.SelectedValue = ViewState["MyFilter"].ToString();

    El problema es que ya tienes un elemento seleccionado (probablemente el primero en la lista) y que están buscando otra han seleccionado así. Tenga en cuenta que el tener varios elementos seleccionados es válido para ListBox y CheckListBox, pero no para un DropDownList.

    Hacer uno de los ListItem seleccionado automáticamente no anule la selección de los otros elementos en el ListItemColletion.

    • Gracias Adrian, he hecho los cambios y yo todavía estoy recibiendo el mismo error
    • Asegúrese de que usted no tiene dos elementos con el mismo valor
    • no tengo duplicados y también estoy recibiendo distintos nombres desde mi mesa, como se puede ver en mi instrucción select
    • Adrian, también he añadido el código para mi desplegable en mi mensaje inicial. ver arriba. gracias
    • Gracias. Me ha estado molestando por un par de horas ya!!!!
    • Yo iba a responder a esta por la recompensa, pero ESTA es la respuesta correcta. No entiendo por qué no funciona para usted. El problema es que no se puede establecer los valores de las propiedades de los elementos en el cuadro de lista después de databind. Creo que de esta manera… después de enlazado, el cuadro de lista PROPIETARIA de los elementos, y que usted necesita para ir a través del cuadro de lista para cambiar el elemento seleccionado. Me puede explicar lo que está sucediendo detrás de las escenas, pero ya existe una respuesta correcta aquí, no estoy seguro de que el valor de hacerlo. Usted está lanzando eventos que no están pensando en, básicamente.
    • Gracias hombre, totalmente salvó mi día!

  2. 5

    Es bastante simple en realidad, como Adrian mencionó que este error se produce cuando se tiene un elemento en la lista desplegable seleccionado y, a continuación, en otros lugares en el código seleccionar otro elemento.

    Para solucionar el problema de poner un freno al punto en GetGroupNameList y si el error se produce en esta línea:

    DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString()).Selected = true;

    Coloque la siguiente línea de código de arriba, justo encima de ella:

    DropDownList1.ClearSelection();

    Si esa línea no tiro un error que significa la segunda selección que se realiza después de la GetGroupNameList llamada de método, en ese caso, DropDownList1.ClearSelection(); inmediatamente después de la llamada para GetGroupNameList

    • Deni, gracias hombre, pero he intentado todo lo que usted sugiere y todavía me estoy poniendo de los duplicados. También he añadido el código para la carga de la página en mi post anterior para ver si se puede ver algo mal estoy haciendo. thnx
    • ¿Dónde te llame GetGroupNameList?
    • yo llamo a que en el Bind_GridView método. Acabo de actualizar mi primer post y añadido el Bind_GridView método. Pls. ver arriba. gracias
    • sigo teniendo el problema por favor alguien puede ayudar?
    • postal de su proyecto y publicarlo en Google drive y compartir el enlace con mí,voy a echar un vistazo
    • ¿cuál es su correo electrónico?
    • he compartido ahora, así que los pls me dejó saber si u got it

  3. 2
    DropDownList1.ClearSelection();
    DropDownList1.FindByValue("parameter").Selected = true; 

    Asegúrese de que no está el enlace de datos múltiples ddl para el mismo origen de datos. De ser seleccionado es un atributo de un elemento, por lo tanto, si es diferente ddl seleccionar elementos diferentes en el mismo origen de datos, cada uno de los ddl termina con varios elementos seleccionados que es probablemente lo que está sucediendo aquí..

  4. 1

    Puedes intentar:

    DropDownList1.ClearSelection();

    Antes de la línea:

    DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString())
                  .Selected = true;
  5. 1

    Te sugiero que para no agregar a los valores predeterminados de DropDownList de aspx y clara de todos los elementos antes de enlazar datos.

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="NameChanged"
                            DataTextField="Name" DataValueField="Name" >
                        </asp:DropDownList>

    y cambio GetGroupNameList método a continuación

    private void GetGroupNameList(DropDownList ddl)
        {
            ddl.Items.Clear();
            String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
            SqlConnection con2 = new SqlConnection(strConnString);
            SqlDataAdapter sda = new SqlDataAdapter();
            SqlCommand cmd1 = new SqlCommand("select distinct Name" +
                            " from MyTable");
    
            cmd1.Connection = con2;
            con2.Open();
    
            ddl.DataSource = cmd1.ExecuteReader();
            ddl.DataTextField = "Name";
            ddl.DataValueField = "Name";
            ddl.DataBind();
            con2.Close();
    
            ddl.Items.Insert(0, new ListItem("Top 10", "10"));
            ddl.Items.Insert(0, new ListItem("ALL", "ALL"));
    
            ListItem oListItem = ddl.Items.FindByValue(ViewState["MyFilter"].ToString());
            if(oListItem != null){
                 ddl.ClearSelection();
                 ddl.SelectedValue = oListItem.Value;
            }
        }
    • Creo que esto golpea el quid de la cuestión. Cada vez que el usuario hace una selección que se vuelve a enlazar el menú desplegable para el origen de datos, pero usted tiene AppendDataBoundItems=»true», lo que impide que los valores anteriores de ser aniquilada en volver a enlazar. Necesita establecer AppendDataBoundItems=»false» (valor predeterminado) o borrar los Elementos de la colección antes de cada enlazar.

Dejar respuesta

Please enter your comment!
Please enter your name here