ObjectListView - 通过单击具有固定内容/文本的指定列来删除行

时间:2012-09-27 20:20:50

标签: c# objectlistview

我有一个简单的问题,我无法自己解决。

我有一个ObjectListView填充了我的一些对象。但除此之外,我想要另一列,默认文本为“删除”。单击该列时,应删除选定的行。我该怎么做?

2 个答案:

答案 0 :(得分:13)

您可以通过使所需的行可编辑并使用CellEditActivation事件来实现此目的。按如下方式初始化您的OLV和“删除列”:

// fire cell edit event on single click
objectListView1.CellEditActivation = ObjectListView.CellEditActivateMode.SingleClick;
objectListView1.CellEditStarting += ObjectListView1OnCellEditStarting;

// enable cell edit and always set cell text to "Delete"
deleteColumn.IsEditable = true;
deleteColumn.AspectGetter = delegate {
    return "Delete";
};

然后,您可以在单击列后立即删除CellEditStarting处理程序中的行:

private void ObjectListView1OnCellEditStarting(object sender, CellEditEventArgs e) {
    // special cell edit handling for our delete-row
    if (e.Column == deleteColumn) {
        e.Cancel = true;        // we don't want to edit anything
        objectListView1.RemoveObject(e.RowObject); // remove object
    }
}

为了改善这一点,您可以显示除文字之外的图像。

// assign an ImageList containing at least one image to SmallImageList
objectListView1.SmallImageList = imageList1;

// always display image from index 0 as default image for deleteColumn
deleteColumn.ImageGetter = delegate {
    return 0;
};

结果:

enter image description here

如果您不想在图像旁边显示任何文字,可以使用

deleteColumn.AspectToStringConverter = delegate {
    return String.Empty;
}; 

您还可以将Aspect设置为空字符串,但请将其视为“最佳做法”。通过仍然返回一个方面,排序和分组仍然有效。

答案 1 :(得分:0)

如果“删除”列不是ObjectListView中的第一列,则必须设置

ShowImagesOnSubItems = true;

另见ObjectListView show icons