跳到主要內容

DataGridView使用心得

這陣子還蠻常使用Windows Form中的DataGridView來檢視或者編輯資料的,因此有些功能在此做個紀錄。

1.如果希望在DataGridView中可以設定欄位的AutoSizeColumnsMode屬性。但是如果在DataGridView上已經設定好屬性值,但是沒有Binding資料時,這個屬性值的作用不大。因為沒有Binding資料所以其實欄位只會根據HeaderText的文字內容來設定大小,所以當資料再Binding進來時,即便資料內容長度大於HeaderText也不會自動調整大小,要解決這個問題很簡單只要再資料Binding結束後,下:

this.dataGridViewName.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);


就可以自動重新ReSizeColumns大小了。



 



2.在DataGridView中的編輯模式,會有幾種狀況需要注意的。



Q1.編輯模式預設都會有一行空白行在最後面,或者當沒有資料時會在第一行就是空白行,怎麼在讀取資料時自動避掉該行?記得只要下:



if(!this.dataGridViewName.Rows[index].IsNewRow)
{
程式寫在這裡;
}


就會排除這行空白行。



Q2.上述的狀況適用於該行都未曾被focus過,如果你點選其中一個欄位,IsNewRow就會被變更成false,這時候就要換一招了,判斷該行是否所有欄位都沒有資料。我寫了下面這個Method來解決這個問題。



/// <summary>
/// 檢查Row是否為空的
/// </summary>
/// <param name="dataRow"></param>
/// <returns>是空的回傳true,否則回傳false</returns>
private bool RowIsEmpty(DataGridViewRow dataRow)
{
bool rowIsEmpty = true;

foreach (DataGridViewCell cell in dataRow.Cells)
{
if (cell.Value != null && !string.IsNullOrEmpty(cell.Value.ToString().Trim()))
{
rowIsEmpty = false;
}
}

return rowIsEmpty;
}


Q3.在儲存時如果是一次儲存,通常會跑圈來把所有的Row都處理一次,透過上面兩個方法可以避掉空白行的問題,可是如果在注意一下,會發現如果在按儲存時,你的游標停在最後一個編輯的格子中,該格子的資料會抓不到,筆者猜測應該是該欄位處於EditMode所以無法被讀取資料,因此如果在抓取資料前在前面加入:

this.dataGridViewName.EndEdit();



就可以確保在抓資料時,所有欄位都不處於EditMode。



 



(未完待續…)

留言

這個網誌中的熱門文章

以管理者權限執行批次檔

最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。

如何使用電子發票應用API

財政部在電子發票推行上,為了方便開發更多應用所以提供了API可供個人或者廠商進行相關應用的開發,申請的方式請參考 –> 電子發票API申請 最簡單的申請方式就是透過自然人憑證或者工商憑證申請,這樣就不需要檢附任何證明文件。不過這不是本篇的重點,當申請到時會給你一組AppID跟APIKey,然後你可以下載 電子發票應用規格1.4版 來了解怎樣使用這個API,或許是我才疏學淺,所以在1.3版的時候其實搞不太懂他的API文件,到了1.4版才摸清楚發生了什麼事,當然還是花了點時間才搞懂,現在就簡單說明一下API的使用方式,希望看到本篇文章的同好就不需要花時間測試了。

DataGridView欄位統一格式化

最近的工作內有一個需求,就是由於專案中有許多呈現資料的DataGridView,而其中的欄位需要呈現的包含金額、數字或者日期等格式,若要一個個的設定格式,如果有一天格式突然變更,可能就要苦工做到死,如何讓專案中的這些格式都統一就成了一個問題,經過了一番查找,發現可以透過DataGridView.CellFormatting Event來解決這個問題。