public void dgvExportToCsv(DataGridView dgvValue,
string csvFullFilename,
string delimiter = ",",
List<int> omitRowIdxList = null,
List<int> omitColumnIdxList = null,
List<int> useTagColumnIdxList = null)
{
StreamWriter csvStreamWriter = new StreamWriter(csvFullFilename, false, System.Text.Encoding.UTF8);
int rowIdx = 0, realRowIdx = 0;
int columnIdx = 0, realColumnIdx = 0;
//output header data
string headerRowStr = "";
for (columnIdx = 0, realColumnIdx = 0; columnIdx <= dgvValue.ColumnCount - 1; columnIdx++)
{
if ((omitColumnIdxList != null) && omitColumnIdxList.Contains(columnIdx))
{
//omit this column
}
else
{
headerRowStr += dgvValue.Columns[columnIdx].HeaderText + delimiter;
realColumnIdx++;
}
}
csvStreamWriter.WriteLine(headerRowStr);
//output rows data
for (rowIdx = 0, realRowIdx = 0; rowIdx <= dgvValue.RowCount - 1; rowIdx++)
{
if ((omitRowIdxList != null) && omitRowIdxList.Contains(rowIdx))
{
//omit this row
}
else
{
string eachRowStr = "";
for (columnIdx = 0, realColumnIdx = 0; columnIdx <= dgvValue.ColumnCount - 1; columnIdx++)
{
if ((omitColumnIdxList != null) && omitColumnIdxList.Contains(columnIdx))
{
//omit this column
}
else
{
DataGridViewCell curCell = dgvValue[columnIdx, rowIdx];//dgvValue.Rows[rowIdx].Cells[columnIdx]
if ((useTagColumnIdxList != null) && useTagColumnIdxList.Contains(columnIdx))
{
eachRowStr += curCell.Tag + delimiter;
}
else
{
eachRowStr += curCell.Value + delimiter;
}
realColumnIdx++;
}
}
csvStreamWriter.WriteLine(eachRowStr);
realRowIdx++;
}
}
csvStreamWriter.Close();
}
例 15.5. dgvExportToCsv 的使用范例
string outputFilename = txbExpAlertFilename.Text + ".csv";
string fullFilename = Path.Combine(saveFolderPath, outputFilename);
List<int> omitColumnIdxList = new List<int>();
//omit the last column: View page
omitColumnIdxList.Add(dgvSearchedAlerts.ColumnCount - 1);
crifanLib.dgvExportToCsv(dgvSearchedAlerts, fullFilename, omitColumnIdxList: omitColumnIdxList);