Holas tengo un pequeño detalle para llenar un combobox con TimeZoneInfo.GetSystemTimeZones() lo que hago es lo siguiente:
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:
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:
cmbZonaHoraria.ValueMember = "Id";
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:
cmbZonaHoraria.ValueMember = "Id";
cmbZonaHoraria.DisplayMember = "DisplayName";
cmbZonaHoraria.DataSource = TimeZoneInfo.GetSystemTimeZones();
Saludos
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:
cmbZonaHoraria.ValueMember = "Id";
cmbZonaHoraria.DisplayMember = "DisplayName";
cmbZonaHoraria.DataSource = TimeZoneInfo.GetSystemTimeZones();
Saludos
;-) listo quedo claro hace ya tiempo que no uso windows forms :xD