Miembro de diferente valor, mismo control
-
05-07-2019 - |
Pregunta
Editar 1
Creo que mi problema se deriva de lo siguiente. La función que llena la parte del menú desplegable establece el miembro de visualización en el nombre del condado. Luego, cuando intento configurar SelectedText o EditValue, como se ha sugerido, esa función solo devuelve el CountyID que intenta hacer coincidir con algo en la lista desplegable DisplayMember. Lo necesito para que coincida con algo en la lista ValueMember.
Usando lo siguiente, lo hice funcionar, pero es un HACK y agradecería mucho encontrar una solución real.
lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["ResidencyCountyID"].ToString());
Publicación original
Tengo un cuadro de búsqueda (DevExpress) en un formulario de miembro en el que relleno los valores posibles desde la base de datos con este código - >
lkuResidenceCounty.Properties.DataSource = ConnectBLL.BLL.Person.CountyList();
lkuResidenceCounty.Properties.PopulateColumns();
lkuResidenceCounty.Properties.DisplayMember = "CountyName";
lkuResidenceCounty.Properties.ValueMember = "CountyID";
lkuResidenceCounty.Properties.Columns[0].Visible = false;
lkuResidenceCounty.Properties.Columns[2].Visible = false;
lkuResidenceCounty.Properties.Columns[3].Visible = false;
Esto funciona bien ya que el Nombre del Condado se muestra como se esperaba.
Sin embargo, cuando intento cargar el valor de un miembro existente para este campo utilizando el siguiente, que es parte de una función que toma una fila del conjunto de datos - >
lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();
Me sale una caja en blanco. He revisado el código y se está devolviendo el ID correcto para el miembro.
Lamentablemente, el procedimiento almacenado para completar las opciones desplegables de una Tabla de mantenimiento con las columnas " Nombre del condado " &erio; " ID del Condado " ;. Así que eso es correcto. Desafortunadamente, el procedimiento almacenado para cargar el condado actual de una persona específica extrae de la Tabla de Personas, donde hay una columna llamada " ResidencyCountyID " Se llama así porque también hay un " ResponsibilityCountyID " columna.
Necesito una forma para que ambos coexistan, ¿alguna solución?
¡Gracias!
Solución
DisplayMember y ValueMember se utilizan para rellenar el control con la lista de valores seleccionables. Para configurar el valor seleccionado de un control LookUpEdit poblado, establezca su / a> propiedad:
lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();
En respuesta a su edición: Según la documentación:
La fila seleccionada actualmente determina los valores para el valor de edición del editor y muestra el texto. El valor de BaseEdit.EditValue se obtiene del campo RepositoryItemLookUpEditBase.ValueMember, mientras que el texto que se muestra en el cuadro de edición se obtiene del campo RepositoryItemLookUpEditBase.DisplayMember de la fila seleccionada.
Cuando cambia BaseEdit.EditValue, El editor localiza y selecciona la fila. cuyo RepositoryItemLookUpEditBase.ValueMember campo contiene el nuevo valor. El texto en el cuadro de edición se cambia para reflejar la fila recién seleccionada.
No uso estos controles pero me parece que no debería funcionar como lo describiste. Creo que el ToString () es el problema porque EditValue acepta un objeto, por lo que probablemente está esperando un int para el valor. Prueba:
lkuResidenceCounty.EditValue = (int)row["ResidencyCountyID"];
Otros consejos
La propiedad ValueMember le dice a la lista de qué campo extraer cuando se configura la propiedad Value. Una vez que haya establecido el ValueMember en " CountyID " ;, luego, cuando la lista sea Databound, establecerá todas las propiedades de valor de los elementos de la lista para que respeten los campos de CountyID de sus objetos.
Por lo tanto, no debes hacer:
lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();
sino más bien
lkuResidenceCounty.Properties.ValueMember = "CountyID";
estuvo perfectamente bien, siempre y cuando hayas identificado correctamente el campo que estás tratando de vincular. Una vez que la lista esté en el archivo de base de datos, debería ver los resultados que está esperando.
Sin embargo, después de ver tu código, parece que no estás coincidiendo con tu campo. En un lugar está usando ResidencyCountyID y en otro está usando CountyID. Esa es muy probablemente su fuente de confusión. Averigua cuál es el nombre real del campo y asegúrate de establecer el ValueMember en eso.
ACTUALIZAR
Después de leer su comentario, lo que está buscando es la propiedad SelectedValue. La propiedad SelectedValue le dice a la lista que fuerce el valor seleccionado a cualquier entrada que le des.
Esencialmente tienes dos cosas sucediendo aquí. ValueMember le dice a la lista qué debe usar como valor de su fuente de datos, y SelectedValue, que le dice a la lista cuál debe ser el valor seleccionado actualmente.
¿Por qué es necesario que el mismo LookUpEdit tenga dos miembros de valor? ¿Se está utilizando de forma independiente o en una cuadrícula? Si es independiente, puede intercambiar los dos editores de repositorio en función de la fila actual. Pero, ¿hay más de 2 valores posibles para el ValueMember? Eso también complicaría las cosas.
ACTUALIZACIÓN
Mirando tu edición, creo que entiendo un poco más lo que está pasando. Entonces, ¿no desea cambiar su ValueMember (que se refiere a una columna de datos), sino cambiar el valor del editor? Si es así, entonces definitivamente deberías usar EditValue (no SelectedText, que no creo que deba configurarse), y asignarlo a la fila [" value_field "] así:
lkuResidenceCounty.EditValue = row["ResidencyCountyID"];
¿Qué sucede cuando haces eso?