Но у нас некоторые строки требуют одной строки для отображения, некоторые две - а делать все двухстрочными это достаточно накладно по использованию экрана.
Решение: Напрямую мы не можем обращаться к высоте каждой строки. Но такой параметр ЕСТЬ, правда он с приватным модификатором доступа, поэтому придётся немного схитрить
Добавим после заполнения данными (dataGrid1.DataSource = dataTable;)
такой код
//Здесь получаем все строки var allRows = (ArrayList)dataGrid1 .GetType() .GetField("m_rlrow", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance) .GetValue(dataGrid1); //Здесь формируем массив строк для обработки с их индексами foreach (var pair in dataTable.Rows.Cast<DataRow>() .Select((r, i) => new {Row = r, Index = i}) //Указываем параметр по которому увеличиваем размер строки .Where(x => x.Row["Type"].ToString().Contains("\n"))) { int index = pair.Index; //Эдесь мы можем получить доступ к строке если надо //DataRow row = pair.Row; SetGridRowHeight(allRows[index], 60); }
Далее сама функция изменения размера
public static void SetGridRowHeight(object row, int height) { row.GetType().GetField("m_cy", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance) .SetValue(row, height); }
Комментариев нет:
Отправить комментарий