.net - net - llenar combobox c#
.NET ComboBox Binding Issue (5)
El problema es la propiedad Ordenada de ComboBox porque sus datos provienen de una DataTable.
Cuando se usa la propiedad Sorted, ComboBox organiza el DisplayMember solamente e ignora otros datos, ya que no puede modificar el DataTable directamente. Ejemplo:
Datos de DataTable como DataSource sin ordenar
channelType channelTypeID ComboBoxDisplayMember ComboboxValueMember
Web 2 Web 2
Mailer 3 Mailer 3
Catalog 4 Catalog 4
ahora con propiedad ordenada
channelType channelTypeID ComboBoxDisplayMemberSorted ComboboxValueMember
Web 2 Catalog 2
Mailer 3 Mailer 3
Catalog 4 Web 4
Este problema se puede resolver en la base de datos agregando al final de la consulta: "ORDER BY FieldName" http://technet.microsoft.com/en-us/library/ms188385.aspx
Tengo 2 cuadros combinados, cada uno está vinculado a la misma tabla de datos, así:
channelTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
channelTypeCB.DisplayMember = "channelType";
channelTypeCB.ValueMember = "channelTypeID";
channelTypeCB.BindingContext = new BindingContext();
newSKChanTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
newSKChanTypeCB.DisplayMember = "channelType";
newSKChanTypeCB.ValueMember = "channelTypeID";
newSKChanTypeCB.BindingContext = new BindingContext();
Cuando hago clic en un botón para insertar un registro en la base de datos, uso channelType.SelectedValue ... que devuelve el valor incorrecto. Tengo la sensación de que tiene algo que ver con el uso de la ordenación ComboBox (que establecí en las propiedades del control en la vista de diseño). ¿Alguien ha encontrado este problema?
Esto está programado para una aplicación de winforms usando C #
Editar:
Por ejemplo, mi Datatable almacena valores como:
channelType channelTypeID Web 2 Mailer 3 Catalog 4
Esto está ordenado en el cuadro combinado, y cuando selecciono el primer elemento (que sería "Catálogo" cuando está ordenado), SelectedValue devuelve 2, cuando selecciono el segundo elemento, devuelve 3 ... Esperaba que fuera "Catalog" regreso 4
Este es un problema conocido en .net
Voten esto por favor para que se solucione en .NET 5: http://connect.microsoft.com/VisualStudio/feedback/details/542353/combobox-selectedvalue-returns-incorrect-data-when-sorted-is-true
Haría esto de manera diferente: crearía 2 BindingSource
separadas, cada una basada en su DataSet
, y luego BindingSource
cada control DataSource
a la BindingSource
acaba de crear.
MSDN ComboBox.Sorted
Probablemente relacionado con esto
Intentar establecer la propiedad Sorted en un control vinculado a datos genera una ArgumentException. Debe ordenar los datos utilizando el modelo de datos subyacente.
(No obtuvo ningún error)
Entonces, en lugar de usar ComboBox.sort, estoy ordenando DefaultView de DataTable:
SynergyData.ds.Tables["ChannelTypes"].DefaultView.Sort = "channelType";
No estoy convencido de que esta es la mejor manera de hacerlo, pero funciona, y ahora selectedValue devuelve lo correcto
Puede estar refiriéndose a channelTypeCB.SelectedValue en su código, cuando necesite referirse a newSKChanTypeCB.SelectedValue (esto es una suposición total basada únicamente en sus nombres de control).