Dic
07
Posted by Mario
Esto me llevo varios dolores de cabeza, lo posteo para que no se me olvide jajaja, y por si a alguien le sirve.
Trabajando sobre Visual Studio 2005, C#, SQL 2005.
Al seleccionar un Item de un combo llenado mediante un DataTable, estableciendo sus propiedades de indizado y visualizado medainte el mismo conjunto de informacion… osea:
Combo.DataSource = DTComboSource;
Combo.ValueMember = “ID”;
Combo.DisplayMember = “Descripcion”;
Ni convirtiendo a .ToString() el Combo.SelectedValue, deja de mostrar System.Data.DataRowView =(
Solucion:
Cambiar el orden, poner despues de la asigancion de propiedades del combo, el datasource, Combo.DataSource = DTComboSource
Osea:
Combo.ValueMember = “ID”;
Combo.DisplayMember = “Descripcion”;
Combo.DataSource = DTComboSource;
Asi si, asi si, gana la gente. Si no sirve me avisan.
UPDATE!!!
Si se esta ejecutando codigo en el evento SelecteIndex del Combo, se ejcutara por cada vez que un elemnto sea cargado en el combo, para esto, yo utilizo una variable que sirve como semaforo para ejecutar el codigo dentro de SelectedIndex.
Quedando de esta manera:
private void Combo_SelectedIndexChanged(object sender, EventArgs e)
{
if (CargandoCombo== false)
{
//Aqui va el codigo que ocupa el indice, que en ese momento esta siendo traido desde el DATASOURCE de combo, por eso, trae System.Data.DataRowView
}
}
Obviamente, mientras se carga el combo, se debe de prender esta variable:
CargandoCombo = true;
Combo.ValueMember = "ID";Combo.DisplayMember = "Descripcion";
Combo.DataSource = DTComboSource;
CargandoCombo = false;
Y a darle atomos!
Nov
10
Posted by Mario
También hago como que programo :P. Esto fue hecho en Visual Studio 2005.
Recientemente necesitabamos una funcion de autocompletado en cajas de texto que tomara como fuente una consulta, lo que se hizo fue lo siguiente:
public void Autocompletado(string Tabla, string Columna, ref TextBox Text, AutoCompleteMode Estilo)
{
Obj_Conexion.ConnectionString = Cadena_Conexion;
My_Command.Connection = Obj_Conexion;
My_Command.CommandType = CommandType.StoredProcedure;
My_Command.CommandText = “SP_Autocompletado”;
My_Command.Parameters.AddWithValue(”@Tabla”, Tabla);
My_Command.Parameters.AddWithValue(”@Columna”, Columna);
Obj_Conexion.Open();
My_Reader = My_Command.ExecuteReader(CommandBehavior.CloseConnection);
My_Command.Parameters.Clear();
AutoCompleteStringCollection Fuente_Auto = new AutoCompleteStringCollection();
int x = 0;
while (My_Reader.Read())
{
Fuente_Auto.Add(My_Reader.GetString(0));
}
Obj_Conexion.Close();
Text.AutoCompleteMode = Estilo;
Text.AutoCompleteSource = AutoCompleteSource.CustomSource;
Text.AutoCompleteCustomSource = Fuente_Auto;
Text.Refresh();
}
La funcion se hizo parte de una clase “Funciones_Basicas” por llamarla de alguna manera. Recibe como parametros:
- La tabla de la cual se seleccionaran los registros.
- La columna que se incluira en la consulta.
- El TextBox el cual se le modificarán sus porpiedades para admitir el autocompletado.
- Y, el estilo de autocompletado; el cual esta contenido en la enumeración AutoCompleteMode. Este estilo definira como se completan las palabras en el TextBox, puede ser:
- Append, el cual anexa las letras a la palabra que se va escribiendo.
- Suggest, que muestra sugerencias enlistadas debajo del TextBox.
- Ambas!
De acuerdo a la necesidad, se puede adecuar la consulta a la base de datos. En este caso use un Stored Procedure dinámico el cual recibe como parametro el nombre de la tabla (que no es lo mismo que un parametro tipo “tabla”-gracias sasu-).
My_Command.CommandText = “SP_Autocompletado”;
Para poder crear estos objetos, utilize los espacios de nombres
using System.Data.Sql;
using System.Data.SqlClient;
En fin, una vez seleccionado el campo deseado de la tabla, se recorre todo el conjunto de registros y se inserta en un arreglo, cabe mencionar que este arreglo -que en realidad es una coleccion de strings- debe ser mappeado de un objeto AutoCompleteStringCollection. Este fue mi dolor de cabeza! pero como gracias a San Judas y todos esos reggaetoneros que van cada 28 a San hipolito, todo en C# son objetos, bastó ver que objeto recibia la propiedad AutoCompleteCustomSource.
Text.AutoCompleteCustomSource = Fuente_Auto;
Antes de esto, pero no menos importante, es necesario definir la fuente del autocompletado, en este caso es una fuente propia, una coleccion de cadenas -que vino de nuestra BD-.
Text.AutoCompleteSource = AutoCompleteSource.CustomSource;
Fuente_Auto, vendria siendo nuestro “CustomSource”
Text.AutoCompleteCustomSource = Fuente_Auto;
Para los ComboBox -ya cargados- esto no es necesario, solo se selecciona AutoCompleteSource.ListItems y los mismos elementos de la lista seran la fuente del autocompletado-as usual-.
Eso ha sido todo por hoy, sigan en sintonia para mas funciones piñatas, espero, de corazon, que a alguien le sirva.
Gracias… totales.