如何使用ObjectListView显示包含当前行索引的列?

Mit*_*ril 4 .net c# winforms objectlistview

我有以下课程:

public class people
{
    public string name { get; set; }
    public string hobby { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想显示一个这样的列表:

no | name | hobby
-----------------------
01 | kim  | tv
02 | kate | pc
03 | kim  | tv
04 | kate | pc
Run Code Online (Sandbox Code Playgroud)

我知道要实现这一目标的唯一方法是将人们的阶级转变为

public class people
{
    public string no{ get; set; }
    public string name { get; set; }
    public string hobby { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并循环List<people>设置每个no属性。

有没有更好的方法来添加索引号列?

Rev*_*1.0 6

是的,您可以通过处理“ FormatRow”事件来实现所需的目标,如下所示:

objectListView1.FormatRow += delegate(object sender, FormatRowEventArgs args) {
    args.Item.Text = args.RowIndex.ToString();
};
Run Code Online (Sandbox Code Playgroud)

这将在ObjectListView 的第一列上显示从零开始的索引。如果希望它显示为01,02 ...,则可以指定格式字符串和偏移量,例如:

args.Item.Text = (args.RowIndex + 1).ToString("D2");
Run Code Online (Sandbox Code Playgroud)

附带说明:不可能使用AspectGetter实现这一点(这会更优雅),因为在调用它时,该行尚未添加到OLV中,因此没有索引信息。

// !!! won't work !!!
indexColumn.AspectGetter += delegate(object rowObject) {
    return objectListView1.IndexOf(rowObject).ToString();
};
Run Code Online (Sandbox Code Playgroud)