none
Como Hacer el Selected de Listbox que esta concatenado en asp.net c#? RRS feed

  • Pregunta

  • Buenos dias: tengo el siguiente listbox de ejemplo,

     asi lo cargo : 

    {

            string str = "cadena";

            SqlConnection con = new SqlConnection(str);

            string com = "Select id, name, Country,City from UserDetail";

            SqlDataAdapter adpt = new SqlDataAdapter(com, con);

            DataSet myDataSet = new DataSet();

            adpt.Fill(myDataSet, "UserDetail");

            DataTable myDataTable = myDataSet.Tables[0];

            DataRow tempRow = null;

     

            foreach (DataRow tempRow_Variable in myDataTable.Rows)

            {

                tempRow = tempRow_Variable;

                ListBox1.Items.Add((tempRow["id"] + " (" + tempRow["name"] + ")" + " (" + tempRow["Country"] + ")" + " (" + tempRow["City"] + ")"));

            }

    y hasta ahi esta bien:

    pero quiero que al seleccionar un item del listbox me los pase a textbox, pero me marca el siguiente error: "System.Data.SqlClient.SqlException: Conversion failed when converting the nvarchar value '1 (Rohatash) (India) (Noida)' to data type int.'

    Como podria hacer que solo me tome el id al hacer el selected?????

    Asi lo hago yo y me marca ese error:

      SqlConnection con = new SqlConnection(myconsql);
            string query = "Select id, name, Country,City from UserDetail where  id=@id";
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.Parameters.AddWithValue("@id", (lstde.SelectedValue));
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();
           
            if (reader.Read())
            {
                ddlname.SelectedValue = (string)reader["name"].ToString();
                txtc.Text = (string)reader["country"].ToString(); 
                txtci.Text = (string)reader["city"].ToString();
                lblid.Text = (string)reader["id"].ToString();

            }

    Como seria,ayuda por favor???????



    martes, 22 de marzo de 2016 16:12

Respuestas

  • Hola,

    Bueno lo del IndexOf('valor'), fue solo porque tu consulta era obtener el ID, ahora todo cambia, lo podrías hacer pero es más complicado, pero veo que usas DataTable, aquí te muestro un ejemplo, solo fíjate en la lógica :

    * Esto solo es para cargar los datos, lo hice de manera rápida (Tengo un método que me retorna los datos  tipo DataTable)

    Aquí en el botón :

            protected void Button1_Click(object sender, EventArgs e)
            {
                DataTable tabla = cargarDatos();
                
                int indice = ListBox1.SelectedIndex;
    
                txtId.Text = Convert.ToString(tabla.Rows[indice]["Id"]);
                txtNombre.Text = Convert.ToString(tabla.Rows[indice]["Nombre"]);
                txtPais.Text = Convert.ToString(tabla.Rows[indice]["País"]);
    
            }

    Resultado :

    Saludos.


    JC NaupaCrispín


    martes, 22 de marzo de 2016 17:45

Todas las respuestas

  • Hola,

    Prueba haciendo esto :

    int seleccionado = ListBox1.SelectedIndex; string fila = ListBox1.Items[seleccionado].Text; //El trim() es para quitar los espacios en blancos, como es un código no creo que tenga

    TextBox1.Text = fila.Substring(0, fila.IndexOf('(')).Trim();


    Saludos.


    JC NaupaCrispín

    martes, 22 de marzo de 2016 16:31
  • PASARIA TAMBIEN   ddlname.SelectedValue = (string)reader["name"].ToString();
                txtc.Text = (string)reader["country"].ToString(); 
                txtci.Text = (string)reader["city"].ToString();

    OSEA APARTE PASAR A OTROS TEXTOBX EJEMPLO 1 PASAR A TXT ID

    ZARAI A OTRO TEXTBOX Y ASI, COMO SERIA???

     int seleccionado = lstde.SelectedIndex;
                string fila = lstde.Items[seleccionado].Text;
                 lblid.Text = fila.Substring(0, fila.IndexOf('(')).ToString();

    algo asi o no?

    txtci.Text = fila.Substring(0,2, fila.IndexOf('(')).ToString(); como seria???

    martes, 22 de marzo de 2016 17:07
  • Hola,

    Bueno lo del IndexOf('valor'), fue solo porque tu consulta era obtener el ID, ahora todo cambia, lo podrías hacer pero es más complicado, pero veo que usas DataTable, aquí te muestro un ejemplo, solo fíjate en la lógica :

    * Esto solo es para cargar los datos, lo hice de manera rápida (Tengo un método que me retorna los datos  tipo DataTable)

    Aquí en el botón :

            protected void Button1_Click(object sender, EventArgs e)
            {
                DataTable tabla = cargarDatos();
                
                int indice = ListBox1.SelectedIndex;
    
                txtId.Text = Convert.ToString(tabla.Rows[indice]["Id"]);
                txtNombre.Text = Convert.ToString(tabla.Rows[indice]["Nombre"]);
                txtPais.Text = Convert.ToString(tabla.Rows[indice]["País"]);
    
            }

    Resultado :

    Saludos.


    JC NaupaCrispín


    martes, 22 de marzo de 2016 17:45
  • pero mi listbox lo cargo con datos de sql 
    martes, 22 de marzo de 2016 17:52
  • Hola,

    Pero es lo mismo

    public DataTable cargarDatos()
    {
            string str = "cadena";
            SqlConnection con = new SqlConnection(str);
            string com = "Select id, name, Country,City from UserDetail";
            SqlDataAdapter adpt = new SqlDataAdapter(com, con);
            DataSet myDataSet = new DataSet();
            adpt.Fill(myDataSet, "UserDetail");
            DataTable myDataTable = myDataSet.Tables[0];
    
    return myDataTable;
    
    
    }

    En fin, eso es otra manera de agregar, lo que tienes que hacer es obtener los datos del dataTable para que obtengas los valores.

    Saludos.


    JC NaupaCrispín

    martes, 22 de marzo de 2016 17:57
  • Gracias, si me funciono tu codigo, muchas gracias :)
    martes, 22 de marzo de 2016 18:29