У меня есть несвязанный DataGridView (в VS 2008), из которых один столбец содержит путь к файлу. Я хотел бы форматировать строку, используя класс TextRenderer, в событии ColumnWidthChanged, не изменяя основное значение. Проблема в том, что содержимое таблицы сохраняется, когда форма закрыта, и я не хочу сохранять форматированное значение. Я думаю, что я слишком глубоко, чтобы увидеть очевидное решение, поэтому я в зависимости от вас, ребята, хочу указать на это :-).Формат DataGridView Cell без изменения базового значения?
Идея заключается в том, чтобы показать это:
C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin \ 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 ". «т жёстко его (как показано ниже) он получает дополнительно поврежден каждый раз, когда я изменить размер колонки
Вот что он выглядит как после пары изменяет размер:.. 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;
}
}
Этот jus t продолжает становиться более странным !!
Мне удалось исправить проблему искаженной строки путем повторения каждого символа и удаления плохих. Однако теперь у меня есть еще более сумасшедшая проблема. Локальная переменная, которую я назначаю в обработчике событий, сохраняет значение между вызовами.
Вот соответствующий код:
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;
Первый раз изменение размера столбца (см # 's в приведенных выше комментариях):
- После этой линии Путь содержит "".
- После этой строки Путь содержит строку так, как она отображается выше.
- Путь содержит укороченный путь к файлу, как он должен (т.е. "C: \ Documents и Setti ... \ Downloads")
Второй раз подгоняя:
- После этой линии Путь содержит "" , как это должно.
- После этой строки Путь содержит «C: \ Documents and Set ... \ Downloads \ 0 Documents \ Downloads», который был недопустимым значением из предыдущей итерации, прежде чем я удалил недопустимые символы (здесь видны как «\ 0 «) !!
- Теперь путь FUBAR, потому что я начал с испорченной струны, и это только ухудшается.
Зачем было назначено значение Path для недопустимого значения из предыдущего вызова функции (после правильного назначения пустой строки!), Когда я явно назначаю ему значение? !!!!!
См. Мой «ответ» ниже для более подробной информации о проблеме ... – jluce50