2010-10-27 17 views
27

J'utilise DataGridView avec une liaison de données d'objet pour afficher des informations sur la journalisation d'entités dans un système, récupérées via SOAP à partir d'un service distant. L'une des colonnes est appelée "Dernière action" et signifie la dernière fois que l'entité a consigné un message. C'est une valeur System.DateTime. Quand je lis la réponse SOAP (exemple ci-dessous), l'horodatage contient évidemment toutes les informations, jusqu'à la deuxième fraction.Comment formater des colonnes DateTime dans 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> 

Quand j'afficher sur la table, je place peut lire le procès-verbal http://i.stack.imgur.com/dLYBz.png -je utiliser le code suivant pour faire la liaison de données lorsque j'appuie sur le bouton Actualiser

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 aimerait savoir comment contrôler la mise en forme des colonnes de valeurs liées aux données. Je pense que le format jj/mm/aaaa hh: mm vient des paramètres de mon système. Comment remplacer les paramètres de formatage par programmation?

Nous vous remercions à l'avance

code solution complète sur Subversion (programme FFDAGui) pour le projet open source LOGBUS ng.

+0

Comment procéder dans WPF? –

Répondre

14

Si elle est une fenêtre forme Datagrid, vous pouvez utiliser le code ci-dessous pour formater le datetime pour une colonne

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

EDIT:

En dehors de cela, si vous avez besoin de la da au format AM/PM, vous pouvez utiliser le code suivant:

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

'" HH: MM: ss "' du premier exemple ne fonctionnera pas, puisque MM est le mois et non les minutes. –

+0

Corrigé. C'était une faute de frappe. Merci @ManuelHoffmann –

27

Vous pouvez définir le format souhaité:

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

'jj/MM/aaaa 'formate la date en tant que' jj-MM-aaaa'. Utilisez 'dd '/' MM '/' aaaa 'pour formater la date en tant que' jj/MM/aaaa' – TFischer

+2

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

+0

Malheureusement, cela ne change rien pour moi. Ma date reste comme elle est. On dirait que la date dans ma colonne est traitée comme une chaîne qui la rend non-formatable. Existe-t-il des exigences particulières pour les dates, à part le fait qu'il s'agit de véritables valeurs-date? – C4u

0

Vous pouvez définir le format dans ASPX, ajoutez simplement la propriété "DateFormatString" dans votre BoundField.

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

Il n'existe aucune propriété DateFormatString dans 'System.Windows.Forms.DataGridViewCell' –

0

je ces codes espère que cela pourrait aider

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

Pourriez-vous ajouter une explication? –

+0

Cela se produit si vous remplissez manuellement les lignes, et il est souhaitable que vous convertissiez le DateTime en une chaîne. ToString ("d") spécifie le format de date uniquement de la méthode DateTime ToString. – galamdring