Introducción
En algunas situaciones se requiere agregar un ítem especial a los controles, como ser en controles del tipo combo, para que el usuario tenga la posibilidad de indicar que no hay un ítem escogido de la lista.
Esto se usa especialmente en circunstancias en donde el campo que representa el combo es opcional, o se quiere inicializar en un ítem que obligue al usuario a elegir un valor de la lista.
Es por esto que según cual sea la funcionalidad del combo, si actuara como filtro, o como lista con obligación de selección del usuario, es que tendrás distintas leyendas.
Si es un filtro podrías decir: “<Todos los items>”, o sea que no se aplicaría el ítem como filtro, o si el control actual sin una selección por defecto podrías decir: “<Seleccione un ítem de la lista>”, por supuesto este ultimo caso se validaría haya elegido un ítem.
En el articulo se intentara explicar las forma en que es posible añadir un ítem extra a los controles ya sea WinForms o Web.
WinForms ComboBox
El combobox de una aplicación estilo “Windows Application” puede recibir como origen de datos diferentes fuentes, podrías ser una clase especifica creada por uno, o podrías ser un dataset. Según cual sea el origen de datos cambia la solución que debe aplicarse para agregar este ítem extra opcional de la lista, ya que será el origen de datos donde se agrega la opción especial.
Agregar opción usando clases creadas por uno
En el ejemplo se ha definido una clase de nombre “Producto”, es muy simple, solo cumple la función de definir la información que necesitas el control.
public class Producto { public string Descripcion { get; set; } public int Id { get; set; } public int Precio { get; set; } }
El código que carga una lista de tipo Producto y la asigna como origen de datos al combo, es el siguiente:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { cbProductos.ValueMember = "Id"; cbProductos.DisplayMember = "Descripcion"; cbProductos.DataSource = ObtenerListItemOpcional(); } private List<Producto> ObtenerListItemOpcional() { List<Producto> listproductos = ObtenerLista(); listproductos.Insert(0, new Producto() { Id = 0, Descripcion = "<Seleccione un Item>", Precio = 0 }); return listproductos; } private List<Producto> ObtenerLista() { return new List<Producto>() { new Producto(){ Id = 1, Descripcion = "Notebook HP Athlon Neo MV-40", Precio = 3100}, new Producto(){ Id = 2, Descripcion = "Notebook ASUS ATOM N450", Precio = 2300}, new Producto(){ Id = 3, Descripcion = "Notebook ACER N270", Precio = 2000}, new Producto(){ Id = 4, Descripcion = "Notebook SONY Atom TM", Precio = 2600}, new Producto(){ Id = 5, Descripcion = "Notebook DELL SU 4100", Precio = 3400}, new Producto(){ Id = 6, Descripcion = "Notebook ASUS Core i3", Precio = 4500} }; } }
La línea clave en donde se agrega el ítem que permitirá la selección opcional es:
listproductos.Insert(0, new Producto() { Id = 0, Descripcion = "<Seleccione un Item>", Precio = 0 });
Lo importante a remarcar es como el modelo original de datos no es alterado, pudiéndose cargar, si se necesita, un combo simple sin un ítem adicional, se maximiza la reutilización de los métodos separándolos según agregue o no el ítem opcional.
Agregar opción usando un DataTable
En este caso se usara un datatable cuya estructura será definido en runtime, la clave aquí esta en el método ObtenerListItemOpcional() donde se crea la nueva fila en tiempo de diseño.
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { cbProductos.DisplayMember = "Descripcion"; cbProductos.DataSource = ObtenerListItemOpcional(); } private DataTable ObtenerListItemOpcional() { DataTable listproductos = ObtenerLista(); DataRow row = listproductos.NewRow(); row["Id"] = 0; row["Descripcion"] = "<Seleccione un Item>"; row["Precio"] = 0; listproductos.Rows.InsertAt(row, 0); return listproductos; } private DataTable ObtenerLista() { DataTable dt = new DataTable(); dt.Columns.Add("Id"); dt.Columns.Add("Descripcion"); dt.Columns.Add("Precio"); DataRow row = dt.NewRow(); row["Id"] = 1; row["Descripcion"] = "Notebook HP Athlon Neo MV-40"; row["Precio"] = 3100; dt.Rows.Add(row); row = dt.NewRow(); row["Id"] = 2; row["Descripcion"] = "Notebook ASUS ATOM N450"; row["Precio"] = 2300; dt.Rows.Add(row); row = dt.NewRow(); row["Id"] = 3; row["Descripcion"] = "Notebook ACER N270"; row["Precio"] = 2000 ; dt.Rows.Add(row); row = dt.NewRow(); row["Id"] = 4; row["Descripcion"] = "Notebook SONY Atom TM"; row["Precio"] = 2600; dt.Rows.Add(row); row = dt.NewRow(); row["Id"] = 5; row["Descripcion"] = "Notebook DELL SU 4100"; row["Precio"] = 3400; dt.Rows.Add(row); row = dt.NewRow(); row["Id"] = 6; row["Descripcion"] = "Notebook ASUS Core i3"; row["Precio"] = 4500; dt.Rows.Add(row); return dt; } }
En caso de usar un dataset tipado, la técnica es la misma solo que se dispondrá de método específicamente creados por el dataset en tiempo de diseño, en el ejemplo no se contemplo este caso, pero ante la necesidad de usarlo podría ser algo como lo siguiente:
private dtoProducto.ProductosDataTable ObtenerListItemOpcional() { dtoProducto.ProductosDataTable dt = ObtenerLista(); dtoProducto.ProductosRow row = dt.NewProductosRow(); row.Id = 0; row.Descripcion = "<Seleccione un Item>"; row.Precio = 0; dt.Rows.Add(row); return dt; }
Es prácticamente idéntico solo que hay método especiales, por ejemplo, NewProductosRow() y los campos estas tipados en propiedades.
[C#]
|
[VB.NET]
|
ASP.NET DropDownList
La técnicas usadas para añadir un ítem a los controles web, difieren bastante de las usadas en una aplicación winforms.
Tomemos de ejemplo el siguiente html
<form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server"> </asp:DropDownList> <br/> <br/> <asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="true"> <asp:ListItem Value="0"><Seleccione un Item></asp:ListItem> </asp:DropDownList> </div> </form>
Este solo contiene dos controles de lista, pero hay una diferencia entre ellos, el segundo hace uso de una propiedad especial que le permite añadir un ítem definido en código html del mismo, me refiero al AppendDataBoundItems="true"
Si ahora se analiza el código .net usado para cargar cada lista
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { DropDownList1.DataSource = ObtenerLista(); DropDownList1.DataTextField = "Descripcion"; DropDownList1.DataValueField = "Id"; DropDownList1.DataBind(); DropDownList1.Items.Insert(0, new ListItem("<Seleccione un Item>", "0")); DropDownList2.DataSource = ObtenerLista(); DropDownList2.DataTextField = "Descripcion"; DropDownList2.DataValueField = "Id"; DropDownList2.DataBind(); } }
Para el primer dropdownlist se ha agregado el ítem programáticamente usando el método Insert(), indicando en el primer parámetro que el valor estará ubicado en la primer posición.
Mientras que el segundo no requiere del agregado de nada especial, el ítem se había definido en el html.
[C#]
|
[VB.NET]
|
Conclusión
Si se compara las técnicas usadas para cargar el ComboBox de una aplicación WinForms y el DropDownList de una aplicación asp.net, se notara rápidamente que el primer caso el ítem adicional se agrega a los datos antes de bindear el control
Mientras que el el desarrollo con asp.net permite agregar un ítem directo al control, ya sea que se defina el en html, o se use el Insert() en su colección de ítems
Leandro
ResponderEliminarTe saludo
Una consulta, que no tiene que ver mucho con el tema , solo que no se donde ponerla.
Quiero pasar datos de un formulario a otro y lo estoy declarando como una variable de referencia lo cual me funciona en vb asi
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim fr As Form1 = Form1
If (fr.clave = "a") Then
ComboBox2.Enabled = False
Else
ComboBox2.Enabled = True
End If
End Sub
me funciona en vb
lo que no se es como hacer esta declaracion
Dim fr As Form1 = Form1
en c#
no necesito un nuevo objeto sino
capturar lso datos del formulario
podrías ayudarme con eso??
Muchas Gracias
hola Augusto
ResponderEliminarLa linea que mencionas se traduce a c# de la siguiente manera:
Form1 fr = Form1
Aunque esa linea hasta en vb me suena extraña ya que Form1 es la clase de tu formulario, si es asi donde estas tomando la instancia del otro form para asignarla, a esta variable de nombre "fr" que estas declarando.
por ahi se revisas estos otros articulos podrian ayudarte:
Comunicar formularios de forma desacoplada
o quizas
[WinForms] – Pasaje de información formulario hijo
Te recomendaria ademas que des una vuelta por el foro de c#, alli podrias plantear las dudas que tengas:
Foro C#
saludos
Hola Leandro,
ResponderEliminarqueria agradecerte por la respuesta anterior.
Además tengo otra consulta,debo trabajar con Winsock en vb 2005 y no se como ubicarlo.He visto que en versiones como visual basic 6.0 simplemente se jala del cuadro de herramientas un icono como de dos pequeñas pc's, pero en el vb 2005 no se como se trabaja,por otro lado he visto que a veces solo lo instancian en el código en el vb 2005 , es así como se trabaja?.No se si podrás darme una ayuda al respecto.Gracias.
Saludos.
hola Augusto
ResponderEliminarEn realidad es mas una pregunta para un foro, el cual recomiendo:
Foro c#
que para este articulo del blog.
Bien el tema es que el control Winsock ya no existe en .net, ahora se usa la funcionalidad que encontraras bajo el namespace:
System.Net.Sockets
Ejemplos de código de socket
Esta es muchisimo mas amplia que el control de VB6 y mas flexible.
saludos
Leandro,
ResponderEliminaruna consultita...
cuando se habla de insertar "programáticamente"
a qué se refiere?
es q siempre lo he leído pero aun no entiendo.
y cuál es la palabra contraria a hacerlo programaticamente?
gracias..
hola LiZzY
ResponderEliminar"programaticamente" hace referencia a una operacion que realizas desde codigo, o sea que tu mismo en tu programa agregaras las lineas de codigo necesarias para llevar a cabo esa operacion.
En el articulo lo que queria diferenciar es que al bindear los datos del combo no estas creando los items programticamente, lo hace el biding por ti, en cambio ese item adicional en particular si lo agregas explicitamente.
saludos
Hola Buenas Leandro, queria ver si podias ayudarme con algo pequeño, soy nuevo en esto de VB y me ha costado un monton encontrar la forma de hacer lo siguiente.
ResponderEliminarnecesito un menu de tipo DropDownlist con dos opciones que al seleccionarlas cambien el valor de una de las "My.Settings..." que he creado de antes.
se que es mucho el abuso pero realmente tienes una capacidad increible.. que no todos poseemos.
bueno de antemano muchas gracias.
hola FEX
ResponderEliminarLa verdad no estoy tan seguro que en un entorno web el My.Setting aplique para su uso, por ahi si usas el web.config sea mas acertado.
El My.Setting lo asocio mas a configuracion en aplicaciones de escritorio, no una web, o al menos yo no vi usado en ningun sitio.
por ahi estos link ayuden
Using My.Settings in Visual Basic 2005
Application settings in VB.NET 2.0 and Visual Studio 2005
Igualmente si necesitas podrias hacer la pregunta en el foro de MSDN
Foro asp.net
saludos
hola buenas, de nuevo.. gracias por responder mi pregunta, eres muy amable
ResponderEliminarme han quedado algunas dudas respecto a tu respuesta... digamos que no se a que te refieras con "entorno web".. lo que estoy haciendo yo lo definiría como aplicación de escritorio.
se como cambiar las "My.settings" solo basta con agregar un signo igual "=" para cambiar sus valores. Ej:
para la cambiar el valor de la configuración de idioma a 1 seria:
My.settings.idioma = 1
el problema es que no se como agregar esta función a una opcion en un menú de tipo DropDownList...
PD: tal vez estoy utilizando mal la palabra DropDownList, aunque no se mucho de esto creo que se le llama así a un menú que se despliega al pinchar en la flecha que tiene a la derecha.
una vez mas muchas gracias por la ayuda.
hola FEX
ResponderEliminarClaro de ahi viene la confusion, como comentaste sobre un DropDownList y este es el combo de asp.net, al leer esto imagine estabas en un proyecto web.
En las aplicaciones winforms es simplemente ComboBox.
Bien en ese caso para cambiar el valor podrias usar el evento del propio combo, puntualmente el evento:
SelectionChangeCommittedz
en este podrias hacer
Private Sub comboBox1_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs) Handles comboBox1.SelectionChangeCommitted
My.settings.idioma = comboBox1.SelectedValue
End Sub
Aqui supongo que los values del combo devolveran el numero que quieres asignar a la configuracion del idioma.
saludos
Muchas gracias creo que esto es lo que necesitaba.. bueno en realidad aun no me funca... ya que, al darle al botón aceptar el programa debe reiniciarse para así cargar las opciones de configuración de idioma.
ResponderEliminarel método:
My.settings.idioma = comboBox1.SelectedValue
no me da error.. pero al añadir un:
My.Settings.Save()
(que es para que guarde la configuración en el registro del programa y asi mantener esta después del reinicio)
me da un error:
la conversión de la cadena "" en el tipo 'Double' no es valida.
bueno ahora es mi turno buscar la soluciona esto.. así que no te preocupes muchas gracias por todo has sido muy amable. bye!
Leandro
ResponderEliminarBuen dia, el enlace esta roto para descargar el codigo de c#, y gracias por tu gran trabajo de compartir.
hola demonical
ResponderEliminarQue raro, intente recien descargar los ejemplos y pude hacerlo sin problemas.
Quizas habra sido algo temporal en el servicio de skydrive.
Por ahi pida autenticacion con una cuenta de passport o hotmail para que puedas acceder, intenta tambien ingresar con el IE, por ahi tenga problemas otros browsers, igual es raro, pero para descartar que no sea este el inconveniente.
saludos
Leandro
ResponderEliminarBuen día, y nuevamente gracias por el gran aporte que haces a la programación, Descargado sin problemas Saludos.
Leandro
ResponderEliminarBuen Dia
Tengo un Dropdownlist que lo cargo desde el evento load haciendo una consulta de la base de datos(sql), al hacer click en el primer item del dropdownlist no me realiza la consulta para cargar el 2° dropdownlist, necesito clickear en cualquier otro item para que ahora si pueda clickear en el primero y hacer la consulta, ¿como puedo hacer para que se realiza la consulta al seleccionar primero el primer item del dropdownlist?
Leandro
ResponderEliminarPrimero te saludo por tu excelente aporte y me gustaria saber como cargar un combobox en c# en windows form desde una bd sql tanto usando dataset o de alguna otra forma,recien me estoy iniciando en el mundo del codigo y no e pillado ejemplos claros como cargar un combobox
Saludos Cordiales
hola Chipujin
ResponderEliminarel tema es que el evento que usas seguramente se trate del SeelctedIndexChanged o SelectionChangeCommited
ambos evento solo se lanzan ante un cambio en la seelcion, desplegar el combo para elegir el mismo item no representa un cambio
quizas debas usar algun evento alternativo como ser
DropDownClosed
con este si tendras el evento al cerrar el desplegable sin que haya cambiado la seleccion
saludos
hola Gonzalo
ResponderEliminarpodria ser algo como esto
string connstring = "connection string";
using (SqlConnection conn = new SqlConnection(connstring)) {
string query = "Select Id, Nombre From NombreTabla";
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
ComboBox1.DisplayMember = "Nombre";
ComboBox1.ValueMember = "Id";
ComboBox1.DataSource = dt;
}
saludos
uso el evento SelectedIndexChanged, el evento que me comentas no me aparece en la tabla de eventos del visual studio 2008, tenia la idea de agregar un item manaualmente en la posición "0" del componente pero no me gusta mucho la idea y queria saber si habia alguna otra forma de poder hacerlo...
ResponderEliminarGracias por tu Respuesta...
hola Chipujin
ResponderEliminarpero que control estas usando? es un combobox
cual es el evento que comento y no puedes visualizar?
has revisado el articulo, porque si estas vinculando el control a un origen de datos, no puede agregarlo directo
cuando dices componente sigues refiriendote a un combobox ?
saludos
es un dropdownlist y lo enlazo mediante una consulta sql para cargar los datos, en los eventos del dropdownlist no aparece el evento dropdownclosed.
ResponderEliminarel evento en el que hago la consulta para cargar los datos en el dropdownlist se llama SelectedIndexChanged.
Gracias por tu Respuesta.
hola Chipujin
ResponderEliminarahh ok era un desarrollo web, no se porque pense que era winforms por eso apunte a un combobox
mm me temo que en ese caso lo unico que se me courre es que con ayuda de jquery (o sea javascript) detectar el evento en el cliente (aunque no estoy seguro que se exponga alguno) y realizar un __doPostBack() del evento
saludos
Soy Nuevo en esto de la programación y no se como hacer eso que me dices, si me pudieras poner un ejemplo te lo agradecería.
ResponderEliminarsaludos.
Leandro mi problema consiste en que yo tengo programado un evento llamado from_activated en el cual al cerrar el form hijo el cobo se actualiza con el cambio que hice en el form hijo, pero el form padre que contiene el from cuando se activa de nuevo me elije el primer item del combo y validando el texto me deja pasar todo no valida
ResponderEliminareste es elevento
ResponderEliminarPrivate Sub Form_Orden_Compra_Activated(sender As Object, e As System.EventArgs) Handles Me.Activated
Tbl_proveedoresTableAdapter.ClearBeforeFill = True
Tbl_proveedoresTableAdapter.Update(Me.OVISA_DBDataSet.tbl_proveedores)
Tbl_proveedoresTableAdapter.Fill(Me.OVISA_DBDataSet.tbl_proveedores)
Me.ComboBox1.Text = "[Elija Opción]"
End Sub
ese evento al cerrar el form hijo donde creo proveedores me actualiza el dataset alcual esta vinculado el combo proveedores del from padre, pero lo que quiero es que al actualizarlo como me vuelve a armar los items quiero que me devuelva a "[elija opcion]" porque asi lo valido que si el texto del comobo es "[elija opcion]" que me diga elija provedor, eso bien todo el problema que cuando me sale el msgbox el form padre se desactiva verdad, y al cerrar el msgbox se vuelve a activar el form padre autoeligiendome el primer item del combo y eso no me deja validad a la hora de guardar .....gracias
ResponderEliminary he puesto en el load combo1.text"[elija opcion]" peor no lo muestra siempre se auto selecciona el primer item de ese combo eso pasa en todos los enlazados a dataset, la verdad necesito algo que me devuelva elija opcion como item del combo y asi que obligue al usuario a volver a elejir proveedor
ResponderEliminarhola MIND CORRUPTER
ResponderEliminarno entendi que quieres hacer, primero pareciera que son el form padre y un form hijo, pero despues comentas que se trata de un messagebox, eso me confundio
despues usar el evento Activate para lo que planteas no me parece correcto
no se como has implementado la validaciones, pero si es con el evento Validating es logico que el messagebox no debas usarlos
saludos
FOM_COMPRAS(PADRE) DESDE ESTE FORM ABRO FORM_PROVEEDORES (FROM HIJO), CUANDO CREO UN PROVEEDOR Y CIERRO EL FORM_PROVEEDOR, EL EVENTO ACTIVATE DE FORM_COMPRAS(PADRE) ACTUALIZA EL DATASET DEL COMBO PROVEEDORES QUE ESTA EN FROM_COMPRAS(PADRE), EL PROBLEMA ES QUE CUANDO HAY UN MSG DE VALIDACION EL EVENTO ACTIVATE SEVUELVE A CORRER COMO ES DE ESPERARSE, LO QUE QUERIA SABER ES COMO INICIALIZAR EL COMBO PROVEEDORES ENLAZADO A UNA TABLA CON TEXTO [ELIJA OPCION] CADA VEZ QUE ELEVENTO ACTIVATE CORRE POR UN MSGBOX...GRACIAS
ResponderEliminarLA VERDAD QUE QUITE ELEVENTO Y SOLO VALIDO CON ERROR PRVIDER PORQUE SI EL USUARIO OLVIDA LLENAR UN CAMPO REQUERIDO LA VALIDACION VIENE DADA POR MSGBOX, PERO ESO HACE CORRER EL EVENTO ACTIVATE CADA VES QUE EL FORM SE DESACTIVA Y SE ACTIVA POR UN MSGBOX O LA APERTURA Y CIERRE DE UN FORM HIJO VERDAD, CAUSANDO QUE EL COMBO PROVEEDORES EN ELCUAL YO YA HABIA ELEGIDO UN ITEM SE VUELVA A DIBUJAR Y ME ELIJE SIEMPRE EL PRIMER ITEM DE LA LISTA
ResponderEliminarNO SE PORQUE HACE ESO
ResponderEliminarYO EN EL LOAD DEL FORM LE HE PUESTO COMBO1.TEXT = "[ELIJA OCION]" Y SI LO MUESTRA PERO EL COMBO YA HA SELECCIONADO AUTOMATICAMENTE EL PRIMER ITEM DE LA LISTA, NO SE PORQUE, Y SI EVALUO QUE EL COMBOTEXT TENGA ESTO "[ELIJA OCION]" ME AVISARIA QUE TENGO QUE ESCOGER OPCION, PERO EL COMBO YA TIENE EL VALOR DEL PRIMER ITEM, Y CUANDO GUARDO LOS DATOS DEL FORM ME GUARDA "[ELIJA OCION]"
TAMBIEN PROVE METER EL CODIGO QUE ACTUALIZA EL DATASET DE COMBO PROVEEDORES EN EL BOTON CERRAR DEL FORM_PROVEEDORES(HIJO), PERO NO LO ACTUALIZA LA VERDAD QUE EL EVENTO ACTIVATE ES EL MEJOR, PERO NO PARA LO QUE YO QUIERO. GRACIASSS LEANDRO POR TU AYUDA.
ResponderEliminarLA VALIDACIONES SON SIMPLES IF EVALUANDO LOS CONTENIDOS DE LOS TEXTBOX Y COMBOS, ENVIANDOLES MSGBOX DE ADVERTENCIA, PERO COMO DESACTIVAN EL FOMR PADRE Y AL CERRAR MSGBOX SE VUELVE A ACTIVAR EL PADRE VUELVE A CORRER EL VEENTO ACTIVATE.
ResponderEliminarhola MIND CORRUPTER
ResponderEliminarun tema no seria mejor evaluar este problema en el foro, porque la explciacion es largo y los comentarios en el blog no se dejan explicar muy bien
foro vb.net
igualmente si quieres comunciar formulario no uses el activate para recargar o realizar una accion
usa algo como esto
Comunicar formularios de forma desacoplada
o sea antes de cerrar el form hijo invocas al metodo que defines en el form padre para actualizar el combo o realizar determinada accion
saludos
Leandro un saludo, primero que nada por que tu blog es muy bueno e informativo.
ResponderEliminarAhora la consulta, tengo un dataset con una conexion a access con la cual deseo llenar el combobox pero la verdad viendo tu ejemplo no me queda claro como seria en el caso de usar un dataset.. .no se si me puedes ayudar un poco o en que punto enfocarme, conste estoy algo nuevo en esto del VB asi que perdon si la pregunta te parece confusa o demasiado boba, igual gracias
hola Bianconeri
ResponderEliminares que a un combobox no lo vinculas a un dataset, lo haces a un datatable, los controles solo pueden asignarse a un unico datatable
o el problema es que no conoces como cargar el datatable? porque si lo cargas con el dataadapter usando el Fill() solo quedaria asignar este al DataSource del combo
saludos
Excelente explicación Leandro, gracias.. llevaba buscando como hacer esto en winforms ligual que lo hago en asp.net y no daba como
ResponderEliminarmuy ytil el post, pero como hago para un dropdownlist que ya esta vinculado a un datasource de donde saca los datos? y como añado "seleccione uno" si ya viene cargado? muchas gracias
ResponderEliminarhola David
ResponderEliminarme pregunto, leiste el articulo completo? porque me parece rara la pregunta si es que entendiste lo que se propone
analizaste usar el AppendDataBoundItems="true"
saludos
Gracias leandro por todos tus aportes me han servido de mucho
ResponderEliminarMuchas gracias Leandro por todos tus buenos aportes me han servido de mucho en mi desarrollo como profesional "MUCHAS GRACIAS"
ResponderEliminarBuenos mdías Leandro, la verdad es que este ejemplo es el que necesito, pero me estoy volviendo loco como llegar a los datos guardados, por ejemplo, al precio. Lo veo cuando le hago el debug, pero no llego a tomarlo.
ResponderEliminarImagino que debe ser una pavada, pero estoy bloqueado y no lo veo.
Gracias y saludos
Esteban
hola esteban
ResponderEliminarla verdad no encuentro relacion entre este ejemplo y el planteo que realizas sobre el precio
si usas el SelectedValue del combo imagino tendrias el id de la entidad y con este realizar un query para recuperar los otros campos incluido el precio
saludos
Hola Leandro, en numerosas ocasiones me haz sacado de apuros con tus apuntes y consejos y te lo agradezco infinitamente, acudo a ti porque actualmente tengo el siguiente problema, tengo un dropdownlist en asp.net, estoy bajo VB.NET, lleno mi combo con varios datos pero no consigo guardar en una variable el dato que selecciono del combo, siempre me guarda el primer elemento de la lista, me puedes ayudar?
ResponderEliminarhola Luis
ResponderEliminarel dropdownlist lo cargas en el Page_Load' porque si es asi recuerda que debes validar el IsPostBack o sea
If Not IsPostBack Then
'aqui cargas el combo
End If
sino lo validas cada evento lo volvera a cargar perdiendo la seleccion del usuario
saludos
Hola leandro, gracias por la respuesta, el combo lo cargo en el evento textchanged, dependiendo de lo que se escriba se cargan los elementos de la lista
ResponderEliminarhola Luis
ResponderEliminarnada esta causando algun redirect, que pudiera estar recargando la pagina
si pones en el page_load la validacion de ispostback puedes ver que se comporta diferente cuando ingresas la primera vez y cuando se lanza un evento
saludos
Leandro
ResponderEliminarsaludos
disculpa me podrias ayudar con esto:
tengo un textbox y un DropDownList con datos de la base.
lo que deseo es que al escribir en mi textbox un codigo mi DropDownList cambie el valor selecionado autimaticamente
hola fausto
ResponderEliminarno mencionas como cargos los items en el combo pero si defines el ValueMember, DisplayMemeber y Datasource podrias asignar el selectedValue con el valor del textbox y si algun valor coincide lo seleccionara
combobox1.SelectedValue = TextBox1.Text;
pero debe existir un valor coincidente con la asignacion del ValueMember
saludos
hola Leandro
ResponderEliminarlos datos del combo los cargo con datos de mi base de datos
lo que voy a escribir en mi textbox es un codigo en pwsql("un campo en mi base") y mi DropDownList deseo que me aparesca el item que se relaciona con lo que dijite en el textbox
mi codigo:
asp:DropDownList ID="ddlSucursal" runat="server" Width="350px"
ResponderEliminarAutoPostBack="True" DataSourceID="dsSucursal" DataTextField="sucursal"
DataValueField="clave"
asp:SqlDataSource ID="dsSucursal" runat="server"
ResponderEliminarConnectionString="<%$ ConnectionStrings:dataexpressConnectionString %>"
SelectCommand="SELECT clave, ISNULL(pwsql,'') + ' - ' + sucursal + ' ' + CONVERT (varchar(5), codigo) + ' - ' + CONVERT (varchar(100), domicilio) AS sucursal FROM Sucursales order by sucursal"
el cambio del DropDownList lo deseo hacer en el evento OnTextChanged="tb_cod_TextChanged" de mi texbox
ResponderEliminarhola fausto
ResponderEliminaresta pregunta no es la misma del foro
DropDownList lo cargo en el evento textchanged, dependiendo de lo que se escriba se cargan los elementos de la lista
porque seria conveniente seguir alli el tema
saludos
Buenos días! Los molesto con una consulta. Pude crear un combobox en PowerPoint que me muestra una serie de trámites. El problema es que cada vez que abro el archivo tengo que ejecutar el código ya que el desplegable aparece vacío. Según leí en varios lados, el combobox requiere un evento disparador que cargue los datos en él cada vez que se abra. ¿Podrían indicarme cómo hacerlo? Desde ya muchas gracias por vuestra atención.
ResponderEliminarSaludos cordiales,
Diego
hola Diego
ResponderEliminarcomo es eso de un combo en powerpoint? o sea en office
pero eso se programa en VBA
quizas podrias cargar los items en algun evento inicializacion del ppt
Events supported by PowerPoint
saludos
hola leandro disculpa una prregunta lo que estoy intentando es poder elegir varias opciones de un dropdown y q estas opciones vayan mostrando su propio dropdown hijo con parametros que pertenecen a esa opcion me explico? similar al clasico paises estado, pero con la diferencia de elegir por ejemplo dos paises y en su respectivo dropdown sus estados espero me puedas ayudar me urge :(
ResponderEliminaruso c#
ResponderEliminarHola Leandro necesito de tu valiosa ayuda, cómo hago luego de agregar un item a un dropdownlist que diga "TODOS", si el usuario selecciona esa opcion hacer una consulta a la base de datos por todos los item del mismo, ej: Tengo un combo con las opciones:
ResponderEliminar1-Matemáticas
2-Español
3-Todos
Si se selecciona matemàticas me muestra todos los estudiantes que reciben matemàticas y los muestro en un gridview, así sucesivamente con español; pero si se selecciona "TODOS"como hacer un select por cada uno de los item anteriores y mostrarlos. Agradezco de antemano tu valiosa ayuda.
Espero tu respuesta
hola Yeyner
ResponderEliminarsi selecciona todos no seleccionas por los otros item, sino que anulas el filtro asignando un DbNull.Value por parametro
esto lo explico en este articulos
Filtros Condicionales (1/2)
saludos
Hola Leandro, nesecito de tu ayuda, como puedo hacer para que en una caja de texto solo me acepte 2 espacio(tecla) , y cuando escriba algo como esto(""zzz","aaa","pppp") este validado para que no acepte estos tipos de texto.
ResponderEliminarlo estoy desarrollando en Visual Studio 2013 C#
de antemano muchas Gracias.
hola
EliminarPodrias evaluar si puedes usar el control MaskedTextBox y aplicando una mascara ver si se puede limitar
O poderias ver si usando el evento Validating, entonces cuando se quita el foco del control aplicar una regular expression que verifique si cumple con el input valido
Regular Expression Language - Quick Reference
saludos
Hola Leandro, tengo una duda, tengo varios droplist que funcionan con consultas a la base de datos y dependiendo de la selección se llena el segundo y el tercero, la carga funciona bien, pero tengo la opción de agregar otro ítem, también funciona, se carga todo en la base de datos, sin embargo me piden que al cargarse en la base de datos, dependiendo de lo que se haya agregado aparezca como selección en el drop, pero me marca un error porque el ítem seleccionado no se encuentra en la lista, esto sucede porque se carga en la base de datos pero no se recarga el drop, mi pregunta es, como puedo forzar la recarga del drop y seleccionar lo que se acaba de ingresar???
ResponderEliminarHola Leandro, ojala me pudieras orientar en esto, sucede que tengo en un panel 3 droplist anidados, el panel está oculto y se muestra hasta que se selecciona un elemento de un GridView , pero acurre un error, por el hecho de que está oculto el panel, el primer droplist (que desencadena el llenado de los otros dos) no se carga, si lo hago visible cuando muestro el gridview si funciona, pero necesito que el panel esté oculto y mostrarlo hasta el evento de seleccionar, el drop está cargado con datos de una base de datos desde asp con un sqldatasource. Ojalá me puedas ayudar. Gracias
ResponderEliminarhola
EliminarImagino que no funciona porque si ocultas un panel con codigo .net este no se renderiza en el cliente.
Lo que podrias evaluar es si puedes ocultar el panel usando codigo javascript o por medio de style="diaply:none" de esta fotrma el panel y los combos se renderzan en el cliente pero estaran ocultos
saludos
Hola Leandro mira tengo una pregunta. Tengo una practica y en mi Web Form tengo 2 Drop Down List cada uno tiene sus valores pero quisiera saber y que puedo hacer para cuando escoga dos valores u opciones que se me despliegan ahi iguales estos no se señalen como por ejemplo:
ResponderEliminarOrigen: Monterrey
Destino: Monterrey
***Quiero saber como validar esto porfavor :D
hola
EliminarEntiendo que es un desarrollo winform, por lo que podrias definir los eventos SelectionChangeCommitted de estos combos y en este evento validar la seleccion del otro combo, si es coincidente avisarias al usuario, o cambiarias la seleccion definien el SelectedIndex = -1 para que quede en blanco el combo
saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarYa solucione :)
ResponderEliminarHola Leandro, tengo una pregunta espero no sea tan desprolija. Tengo un frmAgregarEmpleado donde tengo dos cmb: Provincias y ciudades. Traigo los elementos de dos listas enlazadas a base de datos. La lista de provincias anda bien, y pude agregar el con tu solución. Pero en el caso de las ciudades no me deja porque el método ListarCiudades no tiene ninguna sobre carga. Acá te paso como muestro ambas listas y podrás ver que la de ciudades es más sucia que la de provincias. Por ahí debe estar el error. No sé si será la forma en la que relaciono ciudades con provincias, o el hecho de que tenga un atributo byte cod_provincia que despues jode.. no entiendo mucho. Ojalá se entienda, gracias
ResponderEliminarpublic List ListarProvincias()
{
using (var db = new DB_LaCortadaEntities())
{
return db.Provincias.OrderBy(c=>c.Nombre).ToList();
}
}
public List ListarCiudades(byte cod_provincia)
{
using (var db = new DB_LaCortadaEntities())
{
return db.Ciudades.Where(x => x.Cod_Provincia == cod_provincia).OrderBy(c=>c.Nombre).ToList();
}
}
buen post gracias
ResponderEliminarHola Leandro,
ResponderEliminarEstoy trabajando con vb.net y tengo un form con un ABM de clientes donde tengo un DataGridView en el que se listan todos los clientes almacenados en la BD y también a un costado los textBox y ComboBox donde se muestran TODOS los datos del cliente que esta seleccionado en el DGV. Para esto, configure la propiedad DGVCliente.SelectionChanged que es la que se encarga de ello y funciona perfecto para los textBox, pero en el caso de los conboBox, no estoy logrando que me muestre el campo correcto. Si bien va cambiando el valor en el combobox a medida q se seleccionan distintos clientes, el problema es que no muestra el registro correspo0ndiente a la foránea de este
Private Sub DGVCliente_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGVCliente.SelectionChanged
Try
t_id.Text = DGVCliente.Rows(DGVCliente.CurrentRow.Index).Cells(0).Value 'id_cli
t_nombre.Text = DGVCliente.Rows(DGVCliente.CurrentRow.Index).Cells(1).Value 'nombre_cli
t_apellido.Text = DGVCliente.Rows(DGVCliente.CurrentRow.Index).Cells(2).Value 'apellido_cli
If cb_iva.Items.Count > 0 Then
cb_iva.SelectedIndex = DGVCliente.Rows(DGVCliente.CurrentRow.Index).Cells(3).Value 'fk_iva_cli
End If
Hola Leandro,
ResponderEliminarEstoy trabajando con asp.net, jquery y razor. Tengo un problema y es que al momento de agregar un valor al dropsownlist no toma este valor. Por ejemplo cmbMarcaVehiculo.SelectedValue = vehiculo.ID_MARCA.ToString();
Para el ejemplo, el valor del ID_Marca es 2 y se lo quiero asignar al selectedvalue pero no lo toma.
Espero me puedas colaborar, muchas gracias.
Sencillo, claro y conciso.
ResponderEliminar