【问题标题】:How to display a column that contains the current row index using ObjectListView?如何使用 ObjectListView 显示包含当前行索引的列?
【发布时间】:2013-04-23 07:42:14
【问题描述】:

我有以下课程:

public class people
{
    public string name { get; set; }
    public string hobby { get; set; }
}

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

no | name | hobby
-----------------------
01 | kim  | tv
02 | kate | pc
03 | kim  | tv
04 | kate | pc

我知道实现这一目标的唯一方法是将人员类更改为

public class people
{
    public string no{ get; set; }
    public string name { get; set; }
    public string hobby { get; set; }
}

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

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

【问题讨论】:

  • 以后要是能有这个内置功能就好了!

标签: c# .net winforms objectlistview


【解决方案1】:

是的,您可以通过像这样处理“FormatRow”事件来实现您想要的:

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

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

args.Item.Text = (args.RowIndex + 1).ToString("D2");

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

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

【讨论】:

  • 如果我的专栏不是第一个怎么办?我对第一列使用图像列,所以这不起作用,我使用的是 e.Item.SubItems[1].Text = (e.DisplayIndex + 1).ToString();但这很丑,因为我不应该使用 SubItems,所以我将其更改为 (e.Model as MyModel).No = e.DisplayIndex + 1;但无论我设置为“否”它都不会更新,我有 UseNotifyPropertyChanged 属性 true 并在我的设置器中触发 PropertyChanged 事件但没有任何反应
  • @ShinoLex:这可能来自FormatCell 事件内部?但我没试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2013-04-07
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多