我有一個未綁定的DataGridView(在VS 2008中),其中一列包含文件路徑。我想在ColumnWidthChanged事件中使用TextRenderer類來格式化字符串,而不實際修改基礎值。問題是表格的內容在表格關閉時保存,我不想保存格式化的值。我想我只是太深,看不到明顯的解決方案,所以我要依靠你們指出:-)。格式化DataGridView單元格而不更改基礎值?
這樣做是爲了顯示此:
C:\ Program Files文件\微軟的Visual Studio 8 \ SDK \ 2.0 \斌\的Gacutil.exe
...因爲這(視列的寬度):
C:\ Program Files文件\ Microso位... \將Gacutil.exe
看來我說話太快了。我從TextRenderer.MeasureText()中得到了一些非常奇怪的結果。如果我將路徑值硬編碼爲「C:\ Documents and Settings \ jluce \ My Documents \ Downloads」,它將以 C:\ Documents and Settings \ jluce \ M ... \ Downloads \ 0wnloads結尾。 「T硬編碼(如下面)它獲取每個I調整列時進一步破壞
這裏是什麼樣子後,一對夫婦的調整大小:。 Screenshot
這裏是目前我在做什麼
if (e.ColumnIndex == 1)
{
foreach (DataGridViewRow Row in mappingsDataGrid.Rows)
{
string Path = (string)Row.Cells[1].Value;
Path = Path.Trim();
TextRenderer.MeasureText(Path, e.CellStyle.Font,
new Size(mappingsDataGrid.Columns[e.ColumnIndex].Width, Row.Height),
TextFormatFlags.ModifyString | TextFormatFlags.PathEllipsis);
e.Value = Path;
}
}
This jus不斷變得怪異!
我設法通過迭代每個字符並刪除壞字符來修復mangled字符串的問題。但是,現在我有一個更瘋狂的問題。我在事件處理程序中分配的局部變量在調用之間保留其值。
下面是相關代碼:
string Path = ""; // <-- #1
Path = "C:\\Documents and Settings\\jluce\\My Documents\\Downloads"; // <-- #2
TextRenderer.MeasureText(Path, Row.Cells[1].Style.Font,
new Size((mappingsDataGrid.Columns[e.Column.Index].Width), Row.Height),
TextFormatFlags.ModifyString | TextFormatFlags.PathEllipsis);
// Left out code that strips invalid chars
Row.Cells[1].Value = Path; // <-- #3
Path = null;
第一次調整柱(參見#的上述評論):
- 後此行路徑中包含 「」。
- 在此行之後Path包含字符串,就像它出現在上面一樣。
- Path包含截斷的文件路徑,因爲它應該(即 「C:\ Documents和Setti ... \下載」)
第二次調整:
- 後此行路徑中包含 「」 , 正如它應該。
- 在此行路徑中包含「C:\ Documents and Settings ... \ Downloads \ 0 Documents \ Downloads」,這是前面迭代的無效值,我將無效字符(在此處顯示爲'\ 0 「)!
- 現在路徑是FUBAR,因爲我從一根擰起來的繩子開始,它變得越來越糟。
當我明確地爲它指定一個值時,爲什麼Path會被分配上一個函數調用的無效值(在正確指定空字符串後!)!!!!!
看到我的「答案」下面的問題更具體的細節... – jluce50 2009-10-23 15:39:48