我似乎无法在任何地方找到任何关于如何使用GroupFormatter委托的示例,以允许我在使用ObjectListView控件时向页面添加页脚。
有没有人有任何可以证明这一点的例子?我想从组头中删除文本并添加页脚(每个页脚不同的文本)。以及更改字体等
任何例子都会非常有用。
答案 0 :(得分:0)
您可以分析
的代码public void MakeGroupies<T>(T[] values, string[] descriptions, object[] images, string[] subtitles, string[] tasks)
ObjectListView类的method。这显式设置了 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 );
}
每个群组肯定会有一个不同的页脚。