SelectedValue para TimeZoneInfo.GetSystemTimeZones()

Iniciado por .::IT::., 3 Abril 2015, 08:07 AM

0 Miembros y 1 Visitante están viendo este tema.

.::IT::.

Holas tengo un pequeño detalle para llenar un combobox con  TimeZoneInfo.GetSystemTimeZones() lo que hago es lo siguiente:

Código (csharp) [Seleccionar]

private void CargarZonasHorarias()
        {
            ReadOnlyCollection<TimeZoneInfo> zonas = TimeZoneInfo.GetSystemTimeZones();
            cmbZonaHoraria.DataSource = zonas;
            cmbZonaHoraria.DisplayMember = "DisplayName";
            cmbZonaHoraria.ValueMember = "Id";
        }


el detalle es que al llamar a cmbZonaHoraria.SelectedValue.ToString() esperaria obtener el Id del TimeZoneInfo seleccionado pero no es asi SelectedValue devuelve el mismo valor que SelectedItem.

bueno la solucion que hice fue:

Código (csharp) [Seleccionar]

string idZona = (cmbZonaHoraria.SelectedItem  as TimeZoneInfo).Id;


y de esa manera tengo el Id del TimezoneInfo seleccionado:

La pregunta es porque no puedo asignar la propiedad:

Código (csharp) [Seleccionar]
cmbZonaHoraria.ValueMember = "Id";
Simplemente .::IT::.

Eleкtro

#1
Buenas

El codigo funciona bien, lo que ocurre es que al asignar el DataSource se dispara el evento SelectedIndexChanged, y fíjate que tú estás asignando el DataSource antes que las propiedades DisplayMember y ValueMember, por ende el evento SelectedIndexChanged se dispara por primera vez sin tener en cuenta los valores que asignas a dichas propiedades y por ese motivo no te devuelve el valor esperado (TimeZoneInfo.Id).

Lo que debes hacer es muy simple, asignar el DataSource lo último, modifica el orden de los factores de la siguiente manera:

Código (csharp,3) [Seleccionar]
cmbZonaHoraria.ValueMember = "Id";
cmbZonaHoraria.DisplayMember = "DisplayName";
cmbZonaHoraria.DataSource = TimeZoneInfo.GetSystemTimeZones();


Saludos








.::IT::.

Cita de: Eleкtro en  3 Abril 2015, 10:15 AM
Buenas

El codigo funciona bien, lo que ocurre es que al asignar el DataSource se dispara el evento SelectedIndexChanged, y fíjate que tú estás asignando el DataSource antes que las propiedades DisplayMember y ValueMember, por ende el evento SelectedIndexChanged se dispara por primera vez sin tener en cuenta los valores que asignas a dichas propiedades y por ese motivo no te devuelve el valor esperado (TimeZoneInfo.Id).

Lo que debes hacer es muy simple, asignar el DataSource lo último, modifica el orden de los factores de la siguiente manera:

Código (csharp,3) [Seleccionar]
cmbZonaHoraria.ValueMember = "Id";
cmbZonaHoraria.DisplayMember = "DisplayName";
cmbZonaHoraria.DataSource = TimeZoneInfo.GetSystemTimeZones();


Saludos

;-) listo quedo claro hace ya tiempo que no uso windows forms  :xD
Simplemente .::IT::.