RowSizingAutoMaxLines одна строка Ultragrid Infragistics

Я использую этот код, это плохой пример, но он работает для тестирования, но в итоге он меняет все строки.

Мне нужно только изменить выбранную строку.

if (e.Cell.Column.Layout.Override.RowSizingAutoMaxLines == 4)
{
       e.Cell.Column.Layout.Override.RowSelectorStyle = Infragistics.Win.HeaderStyle.XPThemed;
       e.Cell.Column.Layout.Override.RowSizingAutoMaxLines = 20;
}
else
{
       e.Cell.Column.Layout.Override.RowSelectorStyle = Infragistics.Win.HeaderStyle.Default;
       e.Cell.Column.Layout.Override.RowSizingAutoMaxLines = 4;
 }

person Gabriel Monteiro de Oliveira    schedule 28.12.2016    source источник


Ответы (1)


Установка RowSizingAutoMaxLines на Override установит это для всех строк. Вместо этого вы можете рассчитать необходимую высоту строки и установить ее для текущей строки, предполагая, что вы заранее установили RowSizing на Free или AutoFree. Вы можете использовать Graphics MeasureString для вычисления высоты одной строки, а затем установить высоту каждой строки следующим образом:

Сначала настройте сетку:

    private void UltraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
    //  I think you need row selectors as you set their style
    e.Layout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;

    //  Set the RowSizing to some Free value to allow each row to has its onw height
    e.Layout.Override.RowSizing = RowSizing.AutoFree;

    //  I think you have multiline text in the cells, so you should set CellMultiLine to true too
    e.Layout.Override.CellMultiLine = Infragistics.Win.DefaultableBoolean.True;
}

Затем измерьте один ряд и установите высоту ряда:

//  Calculate the height of one line of text
var oneLineHeight = float.MinValue;
using(Graphics g = this.ultraGrid1.CreateGraphics())
{
    oneLineHeight = g.MeasureString("Jj", this.ultraGrid1.Font, int.MaxValue, StringFormat.GenericTypographic).Height;

}

// Set the row selectors' style and the row's height
if(e.Cell.Column.Layout.Override.RowSelectorStyle == Infragistics.Win.HeaderStyle.Default)
{
    e.Cell.Column.Layout.Override.RowSelectorStyle = Infragistics.Win.HeaderStyle.XPThemed;

    //  Add 4 to add some padding
    e.Cell.Row.Height = (int)(oneLineHeight * 20 + 4);
}
else
{
    e.Cell.Column.Layout.Override.RowSelectorStyle = Infragistics.Win.HeaderStyle.Default;

    //  Add 4 to add some padding
    e.Cell.Row.Height = (int)(oneLineHeight * 4 + 4);
}
person wnvko    schedule 29.12.2016
comment
Есть ли способ применить эти свойства только для выбранной строки. где код события UltraGrid1_InitializeLayout применяется для всей ультрасети. - person Kiran Desai; 17.02.2020