2012-09-27 23 views
5

Tôi có một câu hỏi đơn giản mà tôi không thể tự giải quyết được.ObjectListView - Xóa một hàng bằng cách nhấp vào một cột được chỉ định có nội dung/văn bản cố định

Tôi có một ObjectListView chứa đầy một số đối tượng của tôi. Nhưng ngoài ra tôi muốn có một cột khác, với văn bản mặc định là "Xóa". Khi nhấp vào cột đó, Hàng đã chọn sẽ bị xóa. Làm thế nào để làm điều đó?

Trả lời

12

Bạn có thể đạt được điều này bằng cách làm cho hàng mong muốn có thể chỉnh sửa và sử dụng sự kiện CellEditActivation. Khởi OLV của bạn và "xóa cột" như sau:

// 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"; 
}; 

Sau đó, bạn có thể loại bỏ các hàng trong xử lý CellEditStarting càng sớm càng cột được nhấp:

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 
    } 
} 

Để cải thiện về vấn đề này, bạn có thể hiển thị hình ảnh ngoài văn bản.

// 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; 
}; 

Kết quả:

enter image description here

Nếu bạn không muốn hiển thị bất kỳ văn bản bên cạnh các hình ảnh mà bạn có thể sử dụng

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

Bạn cũng có thể thiết lập các Aspect đến một chuỗi rỗng, nhưng coi đây là "thực hành tốt nhất". Bằng cách vẫn trả về một khía cạnh, sắp xếp và nhóm sẽ vẫn hoạt động.

0

Nếu "Delete" cột không phải là cột đầu tiên trong ObjectListView, bạn sẽ phải thiết lập

ShowImagesOnSubItems = true; 

Xem thêm ObjectListView show icons.

Các vấn đề liên quan