我有一个简单的问题,我自己无法解决。
我有一个 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 设置为空字符串,但将其视为“最佳实践”。通过仍然返回一个方面,排序和分组仍然有效。