2016-12-28 5 views
0

Ich verwende diesen Code, es ist ein schlechtes Beispiel, aber es funktioniert zu testen, aber es ändert sich schließlich alle Zeilen.RowSizingAutoMaxLines eine Zeile Ultragrid Infragistics

Ich brauche nur die ausgewählte Zeile ändern.

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; 
} 

Antwort

1

Wenn Sie RowSizingAutoMaxLines auf Override setzen, wird dies auf alle Zeilen gesetzt. Stattdessen können Sie die erforderliche Zeilenhöhe berechnen und auf die aktuelle Zeile setzen, vorausgesetzt, Sie haben zuvor RowSizing auf "Frei" oder "AutoFree" festgelegt. Sie können Grafiken MeasureString verwenden, um die Höhe einer Zeile zu berechnen, und dann jede Zeile in der Höhe wie folgt festgelegt:

Erste Setup das Raster:

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; 
} 

Dann eine Zeile messen und die Höhe der Zeile gesetzt:

// 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); 
} 
+0

Dank @wnvko, es ist ein guter Weg, um das Problem zu umgehen. –

Verwandte Themen