ComboBox

24/07/2007 - 16:58 por Nuno Santos | Informe spam
Hola grupo,

Tengo una combobox con dados de una tabla, pero quiero que
el primer ítem del combo sea, por ejemplo: "-- Todos --", como puedo hacer
para que el primer ítem de la combo sea el "--Todos --" y sólo después
vengan los ítems de la tabla.

Gracias de antemano,

Esto es lo que tengo:

myDll.LotesClass plLotes = new myDll.LotesClass();



ADODB.Recordset RS = plLotes .GetListaLotes();

DataSet ds = new DataSet();

OleDbDataAdapter da = new OleDbDataAdapter();

da.Fill(ds, RS, "Lotes");



this.cbLote.DataSource = ds;



this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;

this.cbLote.DisplayMember = "NumLote";

this.cbLote.ValueMember = "IdLote";

this.cbLote.FormatString = "0000";

plLotes = null;

Preguntas similare

Leer las respuestas

#11 Nuno Santos
25/07/2007 - 17:59 | Informe spam
Gracias Juanjo, en principio está correcto lo que dices :)

NS

"[Juanjo]" wrote in message
news:
Mas o menos asi ( no lo he compilado jeje):

ADODB.Recordset RS = plLotes .GetListaLotes();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter();
da.Fill(ds, RS, "Lotes");


/*ESTO ES LO QUE YO PONDIRA*/
DataRow fila = new ds.Tables["Lotes"].NewRow();
fila["IdLote"]=0; //O un calor que tu sepas que no es un valor de la tabla
fila["NumLote"]="Elige un lote";
ds.Tables["Lotes"].Rows.InsertAt(fila,0); //Lo insertas en la primera
posicion
/*FIN*/

this.cbLote.DataSource = ds;
this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;
this.cbLote.DisplayMember = "NumLote";
this.cbLote.ValueMember = "IdLote";
this.cbLote.FormatString = "0000";
plLotes = null;

NOTA: Es posible que te de error, si en la consulta que haces pones
"select * from Lotes"...
por lo que tendras que completar cada uno de los campos de la fila con
valores o
hacer "select IdLote, NumLote from Lotes".

Espero haberme explicado bien. Un saludo.

"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:
Perdona pero me podrias decir como quedaria mi código con tu sugestión.

NS

"[Juanjo]" wrote in message
news:
Yo que lo que hago normalmentes es:
1. LLeno el DataTable que contendra los datos del combo (como lo haces
tu)
2. Inserto una nueva fila en la primera posicion del datatable.

Creo que si primero insertas la fila y el metodo Fill esta configurado
por defecto con
ClearBeforeFill=true te borra todo lo que tienes en el datatable por lo
que pierdes la
primera fila.

Un saludo.



"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:
Lo que hice:
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
OleDbDataAdapter da = new OleDbDataAdapter();
da.Fill(dt, RS);
// Declare the array variable.
object[] rowArray = new object[2];
rowArray[0] = 0;
rowArray[1] = null;
dt.Rows[0].ItemArray = rowArray;
this.cbLote.DataSource = dt.DefaultView;


NS



"Nuno Santos" <nunos7@[REMOVER]hotmail.com> wrote in message
news:
Gracias por responder,
Pero creo que no entiendo bien... hago el insert, pero despues al
hacer el datasource = ds se sobrepone al insert, cierto?

NS

"carlosmsr" wrote in message
news:
cbLote.Items.Insert(int index, object Item);

"Nuno Santos" wrote:

Hola grupo,

Tengo una combobox con dados de una tabla, pero
quiero que
el primer ítem del combo sea, por ejemplo: "-- Todos --", como
puedo hacer
para que el primer ítem de la combo sea el "--Todos --" y sólo
después
vengan los ítems de la tabla.

Gracias de antemano,

Esto es lo que tengo:

myDll.LotesClass plLotes = new myDll.LotesClass();



ADODB.Recordset RS = plLotes .GetListaLotes();

DataSet ds = new DataSet();

OleDbDataAdapter da = new OleDbDataAdapter();

da.Fill(ds, RS, "Lotes");



this.cbLote.DataSource = ds;



this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;

this.cbLote.DisplayMember = "NumLote";

this.cbLote.ValueMember = "IdLote";

this.cbLote.FormatString = "0000";

plLotes = null;

























Respuesta Responder a este mensaje
#12 CrAsH-DMX
26/07/2007 - 05:18 | Informe spam
Bueno, yo lo que hice fue insertar en el ultimo registro del dataset con el
que lleno el combo, el registro "--Todos--" y despues se lo pase al combo:

CDBAcces objX = new CDBAcces(Session["cnn"].ToString());
ds = objX.ExecSQL(sql.ToString()); //dado que es un desarrollo en 3 capas,
obtengo el dataset de la capa de datos, pero tu puedes obtenerlo de
cualquier otro
lado
objX = null; //destruyo el objeto de
datos puesto que ya no lo pienso ocupar.
cboSelProveedor.Items.Clear(); //Borro cualquier contenido del
combo, por si tiene algo
if(ds.Tables[0].Rows.Count>0){ //Verifico que el dataset tenga datos
dr = ds.Tables[0].NewRow(); //Creo una nueva fila del mismo tipo
de las del dataset
dr["ATOPROV"] = "-- Todos --"; //Creo el registro --Todos--
ds.Tables[0].Rows.InsertAt(dr, ds.Tables[0].Rows.Count+1); //Lo inserto
al final. aqui tu puedes variar el parametro ds.Tables[0].Rows.Count+1

//para que sea el principio del dataset en lugar del
final
dr = null; //Hago nula la fila
cboSelProveedor.DataSource = ds; //Establezco el dataset como
origen de datos
cboSelProveedor.DataMember = ds.Tables[0].TableName;
cboSelProveedor.DataTextField = ds.Tables[0].Columns[0].ColumnName;
cboSelProveedor.DataBind(); //Y finalmente hago que el combo muestre
los datos.

y con esto ya tienes un bello combo con un campo al final que
dice --Todos--

Espero que esto ayude

Saludos !!!

CrAsH-DMX

"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:%
Hola grupo,

Tengo una combobox con dados de una tabla, pero quiero que
el primer ítem del combo sea, por ejemplo: "-- Todos --", como puedo
hacer para que el primer ítem de la combo sea el "--Todos --" y sólo
después vengan los ítems de la tabla.

Gracias de antemano,

Esto es lo que tengo:

myDll.LotesClass plLotes = new myDll.LotesClass();



ADODB.Recordset RS = plLotes .GetListaLotes();

DataSet ds = new DataSet();

OleDbDataAdapter da = new OleDbDataAdapter();

da.Fill(ds, RS, "Lotes");



this.cbLote.DataSource = ds;



this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;

this.cbLote.DisplayMember = "NumLote";

this.cbLote.ValueMember = "IdLote";

this.cbLote.FormatString = "0000";

plLotes = null;


Respuesta Responder a este mensaje
#13 Nuno Santos
26/07/2007 - 09:58 | Informe spam
Gracias CrAsH-DMX
Lo hice como dice Juanjo, que es como dices también :)

NS

ADODB.Recordset RS = plLotes .GetListaLotes();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter();
da.Fill(ds, RS, "Lotes");


/*ESTO ES LO QUE YO PONDIRA*/
DataRow fila = new ds.Tables["Lotes"].NewRow();
fila["IdLote"]=0; //O un calor que tu sepas que no es un valor de la tabla
fila["NumLote"]="Elige un lote";
ds.Tables["Lotes"].Rows.InsertAt(fila,0); //Lo insertas en la primera
posicion
/*FIN*/

this.cbLote.DataSource = ds;
this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;
this.cbLote.DisplayMember = "NumLote";
this.cbLote.ValueMember = "IdLote";
this.cbLote.FormatString = "0000";
plLotes = null;


"CrAsH-DMX" wrote in message
news:%
Bueno, yo lo que hice fue insertar en el ultimo registro del dataset con
el que lleno el combo, el registro "--Todos--" y despues se lo pase al
combo:

CDBAcces objX = new CDBAcces(Session["cnn"].ToString());
ds = objX.ExecSQL(sql.ToString()); //dado que es un desarrollo en 3
capas, obtengo el dataset de la capa de datos, pero tu puedes obtenerlo de
cualquier otro lado
objX = null; //destruyo el objeto
de datos puesto que ya no lo pienso ocupar.
cboSelProveedor.Items.Clear(); //Borro cualquier contenido del
combo, por si tiene algo
if(ds.Tables[0].Rows.Count>0){ //Verifico que el dataset tenga
datos
dr = ds.Tables[0].NewRow(); //Creo una nueva fila del mismo tipo
de las del dataset
dr["ATOPROV"] = "-- Todos --"; //Creo el registro --Todos--
ds.Tables[0].Rows.InsertAt(dr, ds.Tables[0].Rows.Count+1); //Lo
inserto al final. aqui tu puedes variar el parametro
ds.Tables[0].Rows.Count+1

//para que sea el principio del dataset en lugar del final
dr = null; //Hago nula la fila
cboSelProveedor.DataSource = ds; //Establezco el dataset como
origen de datos
cboSelProveedor.DataMember = ds.Tables[0].TableName;
cboSelProveedor.DataTextField = ds.Tables[0].Columns[0].ColumnName;
cboSelProveedor.DataBind(); //Y finalmente hago que el combo muestre
los datos.

y con esto ya tienes un bello combo con un campo al final que
dice --Todos--

Espero que esto ayude

Saludos !!!

CrAsH-DMX

"Nuno Santos" <nunos7@[REMOVER]hotmail.com> escribió en el mensaje
news:%
Hola grupo,

Tengo una combobox con dados de una tabla, pero quiero que
el primer ítem del combo sea, por ejemplo: "-- Todos --", como puedo
hacer para que el primer ítem de la combo sea el "--Todos --" y sólo
después vengan los ítems de la tabla.

Gracias de antemano,

Esto es lo que tengo:

myDll.LotesClass plLotes = new myDll.LotesClass();



ADODB.Recordset RS = plLotes .GetListaLotes();

DataSet ds = new DataSet();

OleDbDataAdapter da = new OleDbDataAdapter();

da.Fill(ds, RS, "Lotes");



this.cbLote.DataSource = ds;



this.cbLote.DataSource = ds.Tables["Lotes"].DefaultView;

this.cbLote.DisplayMember = "NumLote";

this.cbLote.ValueMember = "IdLote";

this.cbLote.FormatString = "0000";

plLotes = null;






Respuesta Responder a este mensaje
#14 Nuno Santos
27/07/2007 - 09:54 | Informe spam
Gracias José,
En estos momentos no tengo mucho timepo para estar a ver esa solución,
pero la voy a guardar para cuando tengo un tempito la veo :)

Una vez más muchas gracias
NS

"José Eduardo Rojas Coppari" wrote in message
news:
Como necesite hacer eso de agregar "TODOS" al principio de un ComboBox y
luego inserir los datos desde una table me fue mas facil crear un
componente
que hereda de COmboBox y tiene una propiedad para adicionar ese registro
TODOS. Anexo el codigo del componente por ser un poco extenso. Cualquier
duda a las ordenes.

José Eduardo Rojas Coppari

Ciudad del Este - Paraguay


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida