2010-09-18 6 views
0
DataTable myTable = new DataTable("components"); 
    DataColumn mydatcolumn; 

    mydatcolumn = new DataColumn(); 
    mydatcolumn.DataType = System.Type.GetType("System.String"); 
    mydatcolumn.ColumnName = "Component"; 

    myTable.Columns.Add(mydatcolumn); 

    mydatcolumn = new DataColumn(); 
    mydatcolumn.DataType = System.Type.GetType("System.String"); 
    mydatcolumn.ColumnName = "Service Category"; 

    myTable.Columns.Add(mydatcolumn); 

    mydatcolumn = new DataColumn(); 
    mydatcolumn.DataType = System.Type.GetType("System.String"); 
    mydatcolumn.ColumnName = "Component Owner"; 

    myTable.Columns.Add(mydatcolumn); 


    for (int i = 0; i < serviceList.Count; i++) 
    { 
     DataRow mydatarow; 
     //DataRow mydatarow2; 
     mydatarow = myTable.NewRow(); 
     mydatarow["component"] = ComponentList[i]; 
     //mydatarow2 = myTable.NewRow(); 
     mydatarow["Service Category"] = sc[i]; 
     myTable.Rows.Add(mydatarow); 
    } 
    componentRGOdataGridView.DataSource = myTable;  

private void addCoButton_Click(object sender, EventArgs e) 
{ 

} 

Comme mention ci-dessus, je crée un DataTable avec trois colonnes et l'affichage des éléments dans la liste 2 <> (non représenté ci-dessus) sur le datagridview en utilisant ce dataTable. Liste de remplir les lignes pour seulement 2 colonnes et la troisième colonne est pour l'entrée de l'utilisateur. Sur cet événement cliquez sur le bouton, je veux écrire uniquement ces lignes dans un fichier où l'utilisateur donne une entrée et ignore le reste des lignes. Comment puis-je atteindre cet objectif. Merci beaucoupexport datagridview à csv

+0

Quel est votre problème alors? Obtenir la ligne actuelle de l'événement 'OnClick'? Attacher un événement au bouton? Ou créer un fichier CSV à partir d'un 'DataRow' donné? – Abel

+0

Obtenir les lignes pour le datagridview et l'enregistrer dans le fichier .csv est le problème. – Ani

Répondre

0

Utilisez composantRGOdataGridView.Rows pour obtenir tous les row dans le composant RGOdataGridView.
Utilisez ensuite la propriété Cells de la classe DataGridViewRow pour obtenir la valeur de la cellule. Après cela, vous pouvez utiliser votre écrivain csv préféré pour faire un fichier CSV.

Vous pouvez essayer ce code pour imprimer la valeur de la cellule dans la fenêtre de sortie.

foreach (DataGridViewRow item in componentRGOdataGridView.Rows) 
    { 
     Debug.Write(item.Cells[0].Value.ToString()); 
     Debug.Write(item.Cells[1].Value.ToString()); 
     Debug.WriteLine(item.Cells[2].Value.ToString()); 
    } 
0

Le contrôle DataGridView fournit la méthode DataGridView.GetClipboardContent() qui met en forme les cellules sélectionnées comme un DataObject qui peut être placé dans le Presse-papiers de Windows. Ensuite, vous pouvez récupérer le contenu du Presse-papiers en tant que TextDataFormat.CommaSeparatedValue. Cela renvoie le contenu du Presse-papiers sous la forme d'une chaîne au format CSV, qui peut être écrite dans un fichier. En utilisant les méthodes fournies par DataGridView SelectAll() vous pouvez sélectionner l'ensemble DataGridView à copier dans le Presse-papiers. Vous pouvez même copier la ligne d'en-tête en spécifiant DataGridView.ClipboardCopyMode pour être égal à l'enum DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText.

témoin la simplicité du code suivant:

void SaveDataGridViewToCSV(string filename) 
{ 
    // Save the current state of the clipboard so we can restore it after we are done 
    IDataObject objectSave = Clipboard.GetDataObject(); 

    // Choose whether to write header. Use EnableWithoutHeaderText instead to omit header. 
    dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; 
    // Select all the cells 
    dataGridView1.SelectAll(); 
    // Copy (set clipboard) 
    Clipboard.SetDataObject(dataGridView1.GetClipboardContent()); 
    // Paste (get the clipboard and serialize it to a file) 
    File.WriteAllText(filename,Clipboard.GetText(TextDataFormat.CommaSeparatedValue)); 

    // Restore the current state of the clipboard so the effect is seamless 
    if(objectSave != null) // If we try to set the Clipboard to an object that is null, it will throw... 
    { 
     Clipboard.SetDataObject(objectSave); 
    } 
} 

Notez que j'ai aussi pris la précaution de sauvegarder le contenu du presse-papiers avant que je copiais le DataGridView, pour que je puisse restaurer après avoir été fait.

Je crois que cette méthode est supérieure parce que vous utilisez le cadre déjà fourni pour vous, et ne pas réinventer la roue en passant par des lignes et des cellules, ce qui est sujette à des erreurs.

Espérons que cela résout vos problèmes ...