C # Exportation de DataGridViewCheckBoxCell sélectionné
-
28-10-2019 - |
Question
J'essaie d'exporter uniquement les éléments de case à cocher sélectionnés sur une vue de données. Le code actuel que j'ai fonctionne, mais le problème est qu'il exporte tout, je peux voir les valeurs Vrai / Faux dans le fichier csv exporté mais pour la vie de moi, je ne peux pas comprendre comment exporter uniquement les vraies valeurs et pas tout. Un exemple de code est répertorié ci-dessous.
private void GetCellData()
{
string data = "";
string userDesktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
TextWriter tw = new StreamWriter(userDesktop + "\\" + "export.csv");
// Count each row in the datagrid
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells["Selection_Box"].Value != null &&
(bool)dataGridView1.Rows[i].Cells["Selection_Box"].Value)
{
foreach (DataGridViewCell cell in dataGridView1.Rows[i].Cells)
{
data += (cell.Value + ",");
}
data += "\n";
}
else
{
continue;
}
}
tw.WriteLine(data, "data");
tw.Close();
}
La case à cocher sur la grille de données "Selection_Box" est une DataGridViewCheckBoxColumn. ExampleExport est simplement lié à un bouton appelé "Exporter". Lorsque l'utilisateur coche une case dans la grille de données et clique sur "Exporter", un fichier .csv est vidé sur le bureau avec des valeurs similaires à celles répertoriées ci-dessous.
Vrai , 3,1, Tuyauterie, Manuel, RTD, 2,45 Axe,
Vrai , 4,1, Tuyauterie, Manuel, RTD, 2,60 Axe,
Vrai, 5,1, Tuyauterie, Manuel, RTD, 1,5,45 C,
Faux, 6,1, Tuyauterie, Manuel, RTD, 2,45 Axe,
Faux, 8,1, Tuyauterie, Manuel, RTD, 1,5,45 C,
Faux, 29,1, Tuyauterie, Manuel, RTD, 2,45 C,
EDIT: Merci de m'avoir orienté dans la bonne direction, c'est très apprécié. J'ai fini par peaufiner l'instruction if en:
if (dataGridView1.Rows[i].Cells["Selection_Box"].Value != null &&
(bool)dataGridView1.Rows[i].Cells["Selection_Box"].Value)
Il vide maintenant les valeurs sélectionnées.
La solution
Vous devriez vérifier les valeurs dans la colonne CheckBox, quelque chose comme
if((bool) row.Cells["Column7"] as DataGridViewCheckBoxCell).FormattedValue)
Ce n'est que si vrai que vous ajoutez les valeurs de la ligne
Autres conseils
quelque chose comme ça dans le premier bloc for ....
if(((bool)dataGridView1.Rows[i].Cells[0]) == true)
{
// Loop through and get the values
foreach (DataGridViewCell cell in dataGridView1.Rows[i].Cells)
{
data = data + (cell.Value + ",");
}
data += "\n";
}
else
{
// else block not really necessary in this case, but illustrates the point....
continue;
}
Vous pouvez également confirmer si c'est vrai de cette manière
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["Selection_Box"].Value) == true)