Mam DataGridView w aplikacji .Net (V4 C# VS2010) & chcę skopiować wszystkie dane do schowka za pomocą kliknięcia przycisku. Nie ma problemu -DataGridView: Kopiowanie zakończone do schowka
private void copyToClipboard()
{
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
Problem jest to, że użytkownik może już mieć pewne komórki, wiersze itp wybrane na DataGrid & naprawdę nie chce zmienić ten wybór. Powyższe oczywiście wszystko wybiera. Mogę danychGridView1.ClearSelection(); na końcu, który jest marginalnie lepszy, ale wciąż nie osiąga tego, co jest wymagane.
mogę zapisać wybrane komórki:
var mySelectedCells = dataGridView1.SelectedCells;
ale jak mogę dostać te zaznaczone komórki wybrać ponownie na DataGrid po egzemplarzu? Czy istnieje prosty sposób na odzyskanie kolekcji wybranych komórek z powrotem do DataGrid? Być może istnieje lepszy sposób na skopiowanie całej siatki do schowka bez wpływu na obecnie wybrane komórki?
Dzięki. To właśnie zrobiłem na końcu. Musiałem dodać kolejną instrukcję if 'if (row.Cells [i] .Visible), ponieważ kilka kolumn było niewidocznych i to rozwiązanie kopiuje wszystkie komórki, widoczne lub nie - (' dataGridView1.GetClipboardContent(); 'tylko kopie widoczne rzeczy). Nie jestem pewien, w jaki sposób DataGridViewImageCell zostanie obsłużony, ale nie jest to problemem dla mojej konkretnej aplikacji. – Nigel
Nie ma problemu Nigel, cieszę się z pomocy. Kiedy wspomniałem DataGridViewImageCell, po prostu miałem na myśli, że nie jestem pewien, jak zachowywałby się kod, gdybyś używał czegoś innego niż DataGridViewTextBoxCell, ale uważam, że ten typ jest domyślny, jeśli nie określisz inaczej. Ale jeśli używasz wszystkich komórek TextBox, nie powinno to stanowić problemu. Twoje zdrowie. –
Po prostu chcę wspomnieć, że jeśli 'DataGridView' jest duży, prawdopodobnie chcesz użyć' StringBuilder', a nie tylko używać łączenia ciągów. – Anthony