2010-10-27 81 views
27

Estoy utilizando un DataGridView con enlace de datos de objeto para mostrar información sobre entidades de registro en un sistema, recuperado a través de SOAP desde un servicio remoto. Una de las columnas se llama "Última acción" y significa la última vez que la entidad registró un mensaje. Es un valor System.DateTime. Cuando leo la respuesta SOAP (ejemplo a continuación), la marca de tiempo obviamente contiene toda la información, hasta las segundas fracciones.¿Cómo formatear las columnas de DateTime en DataGridView?

<LoggingEntity> 
<host>marty86ce</host> 
<process>10148</process> 
<logger>http_core</logger> 
<appName>httpd</appName> 
<ffda>true</ffda> 
<lastAction>2010-10-27T12:00:19.5117509Z</lastAction> 
<lastHeartbeat>0001-01-01T00:00:00</lastHeartbeat> 
<channelId>em_9BA2A2B4D0B6E66</channelId> 
<ffdaChannelId>em_E7C8D1D4DE8EEB9</ffdaChannelId> 
</LoggingEntity> 

Cuando me lo mostrará en la mesa, en lugar puede leer hasta los minutos http://i.stack.imgur.com/dLYBz.png Puedo usar el siguiente código para hacer el enlace de datos al pulsar el botón de actualización

public void RefreshEntities() 
{ 
    IEntityManagement management = EntityPlugin.GetProxy(); 
    LoggingEntity[] result = management.FindLoggingEntities(new TemplateQuery { ffdaSpecified = true, ffda = true }); //Remote invocation 

    Invoke(new MethodInvoker(delegate { gridEntities.DataSource = result; })); //THIS does the data binding from the array 

    Invoke(new MethodInvoker(delegate { btnRefresh.Enabled = true; })); 
} 

I me gustaría saber cómo controlar el formato de columna de los valores enlazados a datos. Creo que el formato dd/MM/aaaa hh: mm proviene de la configuración de mi sistema. ¿Cómo sobrescribir la configuración de formato mediante programación?

gracias de antemano

código de la solución completa en Subversion (programa FFDAGui) para el proyecto de código abierto LOGBUS-ng.

+0

de cómo hacer esto en WPF? –

Respuesta

14

si es un DataGrid de Windows Forms, podría utilizar el siguiente código para dar formato a la fecha y hora para una columna

dataGrid.Columns[2].DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss"; 

EDITAR:

Aparte de esto, si necesita la da tetime en formato AM/PM, se puede usar el siguiente código

dataGrid.Columns[2].DefaultCellStyle.Format = "MM/dd/yyyy hh:mm:ss tt"; 
+0

'" HH: MM: ss "' del primer ejemplo no funcionará, ya que MM es el mes y no los minutos. –

+0

Corregido. Fue un error tipográfico Gracias @ ManuelHoffmann –

27

Es posible ajustar el formato que desee:

dataGridViewCellStyle.Format = "dd/MM/yyyy"; 
this.date.DefaultCellStyle = dataGridViewCellStyle; 
// date being a System.Windows.Forms.DataGridViewTextBoxColumn 
+4

'dd/MM/aaaa' formatea la fecha como' dd-MM-aaaa'. Use 'dd '/' MM '/' yyyy' para formatear la fecha como' dd/MM/aaaa' – TFischer

+2

'yourColumn.DefaultCellStyle = new DataGridViewCellStyle {Format =" dd '/' MM '/' aaaa hh: mm: ss "};' – Appulus

+0

Lamentablemente, no está cambiando nada para mí. Mi cita permanece como está. Parece que la fecha en mi columna se trata como una cadena que lo hace no formateable. ¿Hay requisitos especiales para las fechas aparte del punto, que sean valores de fecha reales? – C4u

0

Puede configurar el formato en el aspx, sólo tiene que añadir la propiedad "DateFormatString" en su BoundField.

DataFormatString="{0:dd/MM/yyyy hh:mm:ss}" 
+0

No existe dicha propiedad DateFormatString en 'System.Windows.Forms.DataGridViewCell' –

0

utilicé estos códigos espero que podría ayudar a

dataGridView2.Rows[n].Cells[3].Value = item[2].ToString(); 
dataGridView2.Rows[n].Cells[3].Value = Convert.ToDateTime(item[2].ToString()).ToString("d"); 
+0

¿Podría agregar alguna explicación? –

+0

Esto ocurre si está rellenando manualmente las filas, y es deseable que convierta el DateTime a String. ToString ("d") especifica el formato de fecha única del método DateTime ToString. – galamdring

Cuestiones relacionadas