Как использовать GroupFormatter с элементом управления ObjectListView
Кажется, я нигде не могу найти никаких примеров того, как использовать делегат GroupFormatter, чтобы позволить мне добавлять нижние колонтитулы в мои группы при использовании элемента управления ObjectListView.
У кого-нибудь есть примеры, которые могли бы это продемонстрировать? Я хочу удалить текст из заголовка группы и добавить нижний колонтитул (другой текст для нижнего колонтитула). А также изменение шрифта и т. Д.
Любые примеры будут очень полезны.
1 ответ
Вы можете проанализировать код для
public void MakeGroupies<T>(T[] values, string[] descriptions, object[] images, string[] subtitles, string[] tasks)
метод класса ObjectListView. Это явно устанавливает делегаты свойств GroupKeyGetter, GroupKeyToTitleConverter и GroupFormatter.
Это C#, но ваша адаптация VB должна быть простой. Я использую этот небольшой тестовый класс в качестве типа объекта для привязки к представлению списка.
public class TestClass
{
private readonly string _s;
private readonly float _f;
public TestClass( string p1, float p2 )
{
this._s = p1;
this._f = p2;
}
[OLVColumn(DisplayIndex = 1, Name="S", Title="String")]
public string S {get {return this._s;}}
[OLVColumn( DisplayIndex = 2, Name = "F", Title = "Float" )]
public float F {get {return this._f;}}
}
Чтобы не определять свойства столбцов вручную, я использую атрибуты внутри связанного объекта и
BrightIdeasSoftware.Generator.GenerateColumns( this.olv, typeof( TestClass ) );
позвоните в форму / пользовательский элемент управления, где я использую представление списка. Фактически, вот метод, который полностью изолирует конфигурацию ObjectListView:
void SetData( TestClass[] objects )
{
// build list columns
Generator.GenerateColumns( this.olv, typeof( TestClass ) );
// use groups and make current column the priimary sort column
this.olv.ShowGroups = true;
this.olv.SortGroupItemsByPrimaryColumn = false;
// loop through columns and set properties
foreach( OLVColumn col in this.olv.Columns )
{
col.Groupable = true;
col.Sortable = true;
if( col.Name == "F" )
{
col.MakeGroupies<float>( new float[] { 10f, 100f, 1000f }, new string[] { "<10", "10-100", "100-1000", ">1000" } );
}
else if( col.Name == "S" )
{
col.UseInitialLetterForGroup = false;
//
col.GroupKeyGetter = ( obj ) =>
{
TestClass tc = (TestClass)obj;
switch( char.ToLower( tc.S[0] ) )
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': return true;
default: return false;
}
};
//
col.GroupKeyToTitleConverter = ( o ) => { bool b = (bool)o; return b ? "vowel" : "consonant"; };
//
col.GroupFormatter = ( /*OLVGroup*/ group, /*GroupingParameters*/ parms ) =>
{
string s = string.Format ("{0} {1}", group.GroupId, group.Id);
//group.BottomDescription = "BottomDescription: " + s;
//group.TopDescription = "TopDescription: " + s;
group.Footer = "Footer: " + s;
};
}
}
//
this.olv.RebuildColumns();
//
this.olv.SetObjects( objects );
}
У вас определенно будет один отдельный нижний колонтитул для каждой группы.