DataGridView: Copie complète dans le presse-papiers
J'ai un DataGridView dans un .Net application (V4 C# VS2010) & voulez copier toutes les données dans le presse-papiers sur le clic d'un bouton. Pas de problème -
private void copyToClipboard()
{
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);
}
Problème est que l'utilisateur pourrait avoir déjà quelques cellules, lignes, etc sélectionné dans la grille de données & je n'ai pas vraiment envie de changer la sélection. Le ci-dessus sélectionne évidemment tout. Je pourrais dataGridView1.ClearSelection(); à la fin qui est un peu mieux mais encore ne pas réaliser ce qui est nécessaire.
Je peux enregistrer les cellules sélectionnées:
var mySelectedCells = dataGridView1.SelectedCells;
mais comment puis-je obtenir ces cellules sélectionnées resélectionnés sur la grille de données après la copie? Est-il un moyen facile d'obtenir les cellules sélectionnées de la collection de nouveau dans la grille de données? Peut-être il ya une meilleure façon d'obtenir l'ensemble de la grille copié dans le presse-papiers, en premier lieu, sans affecter actuellement sélectionné les cellules?
OriginalL'auteur Nigel | 2012-05-09
Vous devez vous connecter pour publier un commentaire.
Je suppose que si tu voulais seulement représenter le contenu des cellules sous forme de texte et de les copier dans le presse-papiers, des tabulations, vous pourriez faire quelque chose comme:
La sortie semble assez similaire à celle de la
GetClipboardContent()
, mais être prudent pour tout DataGridViewImageColumns ou de quelque type que ce n'est pas implicitement une chaîne de caractères.Edit: Anthony est correcte, utiliser StringBuilder pour éviter d'allouer une nouvelle chaîne pour chaque concaténation. Le nouveau code:
if (row.Cells[i].Visible)
, car un couple de colonnes étaient invisibles & cette solution copies de toutes les cellules, visible ou non (dataGridView1.GetClipboardContent();
copies seule chose visible). Vous ne savez pas comment DataGridViewImageCell sont manipulés, mais ce n'est pas un sujet de préoccupation pour mon application particulière.Pas de problème Nigel, un plaisir de vous aider. Lorsque j'ai évoqué la DataGridViewImageCell, je voulais simplement dire que je ne suis pas sûr de la façon dont le code serait votre attitude si vous utilisez autre chose que DataGridViewTextBoxCell, mais je crois que ce type est la valeur par défaut si vous ne spécifiez pas le contraire. Mais si vous êtes en utilisant toutes les cellules de la zone de texte, il ne devrait pas être un problème. Des acclamations.
Juste envie de mentionner que si la
DataGridView
est grand, vous voudrez probablement utiliser uneStringBuilder
et ne pas simplement utiliser la concaténation de chaîne.OriginalL'auteur B L
Ici est une version du code VB en C# avec des options de copie des en-têtes et de copier seulement les lignes sélectionnées.
OriginalL'auteur AustinAllan
Je pense que la méthode ci-dessous exactement ce que vous voulez. Suffit d'appeler cette méthode avec le DataGridView nom à l'événement click du bouton.
OriginalL'auteur samithagun