我正在嘗試使用 itextsharp pdf 列印 pdf 報告,除“日期”和“時間”列中的值外,所有值都是正確的。日期和時間以“dd/MM/yyyy tt hh:mm:ss”等格式顯示,例如。日期是:08/10/2021 AM 12:00:00,時間是:30/12/1899 AM 07:46:37。
我已經完成了下面提到的所有事情:
- 將 datetimepicker 中的日期值插入為 datetimepicker.Value.ToString("dd/MM/yyyy") 并將時間值插入為 DateTime.Now.ToString("hh:mm:ss tt")
- MS Access 資料庫中日期和時間列的資料型別是日期/時間
我的資料庫顯示正確的格式值,而 datagridview 的時間列格式不正確,生成的 pdf 報告的日期和時間格式不正確。我唯一的問題是這怎么可能,因為資料庫包含正確的資料,但是在 datagridview 中顯示它之后,格式會發生變化,甚至在列印之后。下面我附上了可以幫助您了解場景的圖片。
資料庫列的資料型別↓

資料庫中的值↓

Datagridview 中的值↓

uj5u.com熱心網友回復:
Access 中資料型別Date的 epoc 是 1899-12-30 ,當您同時顯示日期和時間時,也會顯示該日期。
在 .Net 中,您可以應用格式字串“T”來僅顯示小時-分鐘-秒。例如:
DateTime time = new DateTime(1899, 12, 30, 8, 12, 16);
Console.WriteLine(time.ToString("T"));
// 08:12:16
uj5u.com熱心網友回復:
您可以嘗試像這樣設定 DefaultStyle 屬性
dataGridView1.Columns["YourColumn"].DefaultCellStyle.Format = "HH:mm:ss";
或者在設計器中設定它,無論您最喜歡什么。
在您的資料庫中,您的Time列似乎只有一個時間值,但它沒有。它使用可能的最低日期值,即 Access 資料庫的 30/12/1899。
當您只為該列提供時間而沒有日期時,就會發生這種情況。Access(以及其他資料庫)將簡單地使用它們可能的最低日期值來填充缺失的日期值。
DataGridView 因此別無選擇,只能同時顯示日期和時間。
上面的屬性將簡單地指示 DataGridView 不顯示日期部分,只顯示時間部分。
如果你需要在 C# 中的代碼中顯示時間,你可以使用這個
YourDateTimeVariable.ToString("T");
但是,既然您將date和都存盤time在日期時間列中,為什么要將它們分開存盤?
您可以將它們存盤在一列中,并僅顯示/使用您需要的部分。
編輯
以回應您在評論中發布的代碼(請在您的問題中添加此代碼,而不是在評論中)
改變這個
invoicesDatagridview.Rows[i].Cells[1].Value.ToString())
進入這個
((datetime)invoicesDatagridview.Rows[i].Cells[1].Value).ToString("T"))
如果此列可以為空,您將需要一些額外的檢查以避免轉換錯誤。
此外,GridCell 中的格式永遠不會在 ToString() 中使用,您是在值上執行 ToString(),而不是在顯示文本上。
嘗試上面的代碼來解決這個問題
編輯
在下面回復您的評論:
列印代碼不是重點。我只想知道datagridview的單元格值和列印值怎么可以是不同的格式 – karan ugale
通過設定 DefaultCellStyle,您可以告訴 DataGridView 使用什么格式來顯示值。當您使用自己的代碼使用 ToString() 列印此值時,此 ToString() 究竟應該如何知道 DefaultCellStyle 設定?帶有 ToString() 的列印代碼與 DataGridView 完全沒有聯系,您只需將值傳遞給它即可。
看這個例子
invoicesDatagridview.Rows[i].Cells[1].Value.ToString())
可以這樣寫
var someValue = invoicesDatagridview.Rows[i].Cells[1].Value;
someValue.ToString();
現在告訴我, someValue.ToString() 如何知道任何格式?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314219.html
標籤:C# winforms ms-access 数据网格视图 日期时间格式
