net - cargar datatable en combobox c#
C#- Completa un cuadro combinado con una DataTable (6)
Estoy acostumbrado a trabajar con Java, donde hay una gran cantidad de ejemplos disponibles. Por diversas razones, tuve que cambiar a C # e intentar hacer lo siguiente en SharpDevelop:
// Form has a menu containing a combobox added via SharpDevelop''s GUI
// --- Variables
languages = new string[2];
languages[0] = "English";
languages[1] = "German";
DataSet myDataSet = new DataSet();
// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add( lName );
for( int i=0; i<languages.Length; i++ ) {
DataRow lLang = lTable.NewRow();
lLang["Language"] = languages[i];
lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);
// --- Handling the combobox
mnuActionLanguage.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = "Language";
Uno asumiría ver algunos valores en el menú desplegable, pero está vacío. Por favor dime que estoy haciendo mal;
EDITAR: mnuActionLanguage.ComboBox.DataBind () es lo que también encontré en la red, pero no funciona en mi caso.
SOLUCIÓN
mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;
al final resolvió el problema!
¿Estás aplicando RowFilter a tu DefaultView más adelante en el código? Esto podría cambiar los resultados devueltos.
También evitaría usar la cadena como el miembro de la pantalla si tiene una referencia directa en la columna de datos que usaría las propiedades del objeto:
mnuActionLanguage.ComboBox.DataSource = lTable.DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = lName.ColumnName;
Lo he intentado con un formulario en blanco y un combo estándar, y parece funcionar para mí.
Algunos puntos:
1) "DataBind ()" es solo para aplicaciones web (no para aplicaciones de Windows).
2) Tu código se ve muy ''JAVAish'' (no es algo malo, solo una observación).
Prueba esto:
mnuActionLanguage.ComboBox.DataSource = languages;
Si eso no funciona ... supongo que su fuente de datos está siendo intervenida en otro lugar del código.
Debe establecer el contexto de enlace de ToolStripComboBox.ComboBox.
Aquí hay una versión ligeramente modificada del código que acabo de recrear utilizando Visual Studio. El cuadro combinado del elemento de menú se llama toolStripComboBox1 en mi caso. Tenga en cuenta la última línea de código para establecer el contexto vinculante.
Me di cuenta de que si el combo está en el visible son de la tira de herramientas, el enlace funciona sin esto, pero no cuando está en un menú desplegable. ¿Tienes el mismo problema?
Si no puede hacer que esto funcione, envíeme una línea a través de mi página de contacto y le enviaré el proyecto. No podrá cargarlo usando SharpDevelop, pero lo hará con C # Express.
var languages = new string[2];
languages[0] = "English";
languages[1] = "German";
DataSet myDataSet = new DataSet();
// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add(lName);
for (int i = 0; i < languages.Length; i++)
{
DataRow lLang = lTable.NewRow();
lLang["Language"] = languages[i];
lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);
toolStripComboBox1.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
toolStripComboBox1.ComboBox.DisplayMember = "Language";
toolStripComboBox1.ComboBox.BindingContext = this.BindingContext;
Esta línea
mnuActionLanguage.ComboBox.DisplayMember = "Lang.Language";
Está Mal. Cambiarlo a
mnuActionLanguage.ComboBox.DisplayMember = "Language";
y funcionará (incluso sin DataBind ()).
Por ejemplo, creé una tabla:
DataTable dt = new DataTable ();
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Value", typeof(int));
Agregar registro a la tabla:
DataRow row = dt.NewRow();
row["Title"] = "Price"
row["Value"] = 2000;
dt.Rows.Add(row);
o:
dt.Rows.Add("Price",2000);
finalmente :
combo.DataSource = dt;
combo.DisplayMember = "Title";
combo.ValueMember = "Value";
string strConn = "Data Source=SEZSW08;Initial Catalog=Nidhi;Integrated Security=True";
SqlConnection Con = new SqlConnection(strConn);
Con.Open();
string strCmd = "select companyName from companyinfo where CompanyName=''" + cmbCompName.SelectedValue + "'';";
SqlCommand Cmd = new SqlCommand(strCmd, Con);
SqlDataAdapter da = new SqlDataAdapter(strCmd, Con);
DataSet ds = new DataSet();
Con.Close();
da.Fill(ds);
cmbCompName.DataSource = ds;
cmbCompName.DisplayMember = "CompanyName";
cmbCompName.ValueMember = "CompanyName";
//cmbCompName.DataBind();
cmbCompName.Enabled = true;