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

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

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

您可以通过使所需的行可编辑并使用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; }; 

结果:

在此处输入图像描述

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

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

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

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

 ShowImagesOnSubItems = true; 

另请参见ObjectListView显示图标 。