僅就妳的具體需求而言,可以考慮在DataGridView的CellFormatting事件中處理。
假設我們有個DataTable:
DataTable?dt?=?new?DataTable();dt.Columns.Add("col1",?typeof(int));
dt.Columns.Add("col2",?typeof(int));
dt.Columns.Add("col3",?typeof(int));
dt.Rows.Add(1,?2,?3);
dt.Rows.Add(3,?5,?7);
dt.Rows.Add(2,?5,?8);
還有壹個用來轉換數字到地名的字典:
Dictionary<int,?string>?dic?=?new?Dictionary<int,?string>();
dic.Add(1,?"北京");
dic.Add(2,?"上海");
dic.Add(3,?"西安");
dic.Add(5,?"烏魯木齊");
dic.Add(7,?"哈爾濱");
dic.Add(8,?"南京");
妳只需要在DataGridView的CellFormatting事件中寫:
e.Value?=?dic[(int)e.Value]; e.FormattingApplied?=?true;該事件總是在單元格需要格式化及顯示時觸發,系統默認會使用ToString()方法進行格式化,上述代碼強制其使用字典的值代替了原來的數字作為*顯示文本*。此方法可以僅修改顯示而不修改DataTable的值。
請註意,此方法在單元格顯示前格式化的時候觸發(而非綁定時觸發),會較頻繁的被觸發。如果顯示區域中的單元格過多可能會影響顯示效率(大多數情況下沒問題,因為壹個屏幕能夠容納的單元格有限)。
此外,以上示例代碼僅用作修改顯示值,需要在DataGridView中使用單元格編輯來修改數據源時,必須輸入其真實值(即數字)。如果需要在單元格編輯時輸入地名也能轉換成數字寫到數據源,妳還需要修改單元格驗證事件(或者單元格完成編輯事件)。
順便補充下,如果需要針對特定列/特定行/特定單元格進行格式化,可以通過判斷參數e的columnIndex和rowIndex來實現。對於不需要自己格式化的值,請勿使用e.FormattingApplied=true; 這樣控件會使用自己原有的格式化方式。