如何使用GroupFormatter与ObjectListView控件

时间:2014-02-14 03:10:55

标签: vb.net objectlistview

我似乎无法在任何地方找到任何关于如何使用GroupFormatter委托的示例,以允许我在使用ObjectListView控件时向页面添加页脚。

有没有人有任何可以证明这一点的例子?我想从组头中删除文本并添加页脚(每个页脚不同的文本)。以及更改字体等

任何例子都会非常有用。

1 个答案:

答案 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 );
        }

每个群组肯定会有一个不同的页脚。