在计算datagridview中的特定行时遇到问题。 我只计算其中一个单元格的复选框值为真的行。
守则是:
int checkedRowCount = 0;
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel files (*.xls)|*.xls";
sfd.FilterIndex = 0;
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
if (sfd.FileName != "")
{
Excel.Application xlApp;
Excel.Workbook xlWB;
Excel.Worksheet xlWS;
xlApp = new Excel.Application();
xlWB = xlApp.Workbooks.Add(Type.Missing);
xlWS = (Excel.Worksheet)xlWB.Worksheets.get_Item(1);
xlApp.DisplayAlerts = false;
Parallel.ForEach(dataGridView1.Rows.Cast<DataGridViewRow>(), row =>
{
DataGridViewCell cbCell = row.Cells[6];
if (!(cbCell.Value is DBNull))
{
if (Convert.ToBoolean(cbCell.Value) == true)
{
checkedRowCount++;
for (int i = 0; i < dataGridView1.Columns.Count - 1; i++)
{
xlWS.Cells[checkedRowCount, i + 1] = dataGridView1.Rows[row.Index].Cells[i].Value.ToString();
}
}
}
});
xlWB.SaveAs(sfd.FileName, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlWB.Close(true, Type.Missing, Type.Missing);
xlApp.Quit();
Marshal.ReleaseComObject(xlWS);
Marshal.ReleaseComObject(xlWB);
Marshal.ReleaseComObject(xlApp);
}
}
我为当前行(而不是row.Index)使用不同行数的原因是因为我在excel文件中编写了已检查的行(在dgv中选中了复选框)。
输出是总行而不是当前行。
输出是:
15
15
15
15
它应该是:
1
2
3
...
我做了一个不同的项目,只是为了测试它和它的工作正常......
有什么建议吗?
最好的问候
答案 0 :(得分:0)
从我的理解:
id name_x name_y
0 104 molly james
1 104 james molly
2 104 sarah adam
3 236 molly adam
4 388 adam sarah
5 388 johnny pete
6 104 adam sarah
7 236 adam james
8 236 pete johnny