2010-10-27 11 views
27

Używam DataGridView z powiązaniem danych obiektu do wyświetlania informacji o obiektach logowania w systemie, pobieranych za pośrednictwem protokołu SOAP z usługi zdalnej. Jedna z kolumn nosi nazwę "Ostatnia akcja" i oznacza ostatni raz, kiedy jednostka zarejestrowała wiadomość. Jest to wartość System.DateTime. Kiedy czytam odpowiedź SOAP (przykład poniżej), znacznik czasu oczywiście zawiera wszystkie informacje, aż do drugiej frakcji.Jak sformatować kolumny DateTime w 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> 

Kiedy wyświetlić go na stole, zamiast tego można odczytać do protokołu http://i.stack.imgur.com/dLYBz.png używam następujący kod, aby wykonać powiązania danych po naciśnięciu przycisku Odśwież

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 chciałby wiedzieć, jak kontrolować formatowanie kolumny wartości związanych z danymi. Myślę, że format dd/MM/rrrr gg: mm pochodzi z ustawień mojego systemu. Jak programowo zmienić ustawienia formatowania?

góry dziękuję

pełny kod rozwiązaniem na Subversion (program FFDAGui) dla Logbus-NG projektu open source.

+0

Jak to zrobić w WPF? –

Odpowiedz

14

Jeśli jest to okna tworzą DataGrid można użyć poniższy kod sformatować datetime do kolumny

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

EDYCJA:

Niezależnie od tego, jeśli potrzebujesz w formacie AM/PM można użyć poniższego kodu:

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

'" HH: MM: ss "' z pierwszego przykładu nie będzie działać, ponieważ MM to miesiąc, a nie minuty. –

+0

Poprawione. To był literówka. Dziękuję @ManuelHoffmann –

27

Można ustawić żądany format:

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

'dd/MM/yyyy' formatuje datę jako' dd-MM-rrrr'. Użyj "dd"/"MM"/"rrrr", aby sformatować datę jako 'dd/MM/rrrr' – TFischer

+2

' twójKolumn.DefaultCellStyle = nowy DataGridViewCellStyle {Format = "dd"/"MM"/"rrrr gg: mm: ss "};' – Appulus

+0

Niestety to nic nie zmienia dla mnie. Moja randka zostaje taka jaka jest. Wygląda na to, że data w mojej kolumnie jest traktowana jako ciąg, który sprawia, że ​​nie jest ona formatowalna. Czy istnieją specjalne wymagania dotyczące dat, które różnią się od rzeczywistej wartości daty? – C4u

0

Można ustawić format w aspx, wystarczy dodać właściwość "DateFormatString" w BoundField.

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

Nie ma takiej właściwości DateFormatString w 'System.Windows.Forms.DataGridViewCell' –

0

Kiedyś te kod Nadzieja może pomóc

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

Czy mógłbyś dodać jakieś wyjaśnienie? –

+0

Dzieje się tak, jeśli ręcznie wypełniasz wiersze i pożądane jest przekonwertowanie obiektu DateTime na ciąg. ToString ("d") określa format tylko daty z metody DateTime ToString. – galamdring

Powiązane problemy