C#将DataGridView导出为CSV文件
正如你可以看到的图片,我已经附上下面我有一些麻烦转换成一个有效的csv文件。我就快到了,但我想不出我需要的最后一点。我需要将列标题放入文本框,还需要删除每行末尾的“,”。顺便说一句,我正在转换顶部DGV 这是我的密码-C#将DataGridView导出为CSV文件,c#,winforms,csv,datagridview,export-to-csv,C#,Winforms,Csv,Datagridview,Export To Csv,正如你可以看到的图片,我已经附上下面我有一些麻烦转换成一个有效的csv文件。我就快到了,但我想不出我需要的最后一点。我需要将列标题放入文本框,还需要删除每行末尾的“,”。顺便说一句,我正在转换顶部DGV 这是我的密码- private void btnSave_Click(object sender, EventArgs e) { int countRow = dgvCsv1.RowCount; int cellCount = dgvCsv1.Rows
private void btnSave_Click(object sender, EventArgs e)
{
int countRow = dgvCsv1.RowCount;
int cellCount = dgvCsv1.Rows[0].Cells.Count;
for (int rowIndex = 0; rowIndex <= countRow -1; rowIndex++)
{
for (int cellIndex = 0; cellIndex <= cellCount - 1; cellIndex++)
{
textBoxExport.Text = textBoxExport.Text + dgvCsv1.Rows[rowIndex].Cells[cellIndex].Value.ToString() + ",";
}
textBoxExport.Text = textBoxExport.Text + "\r\n";
}
System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
}
private void btnSave\u单击(对象发送者,事件参数e)
{
int countRow=dgvCsv1.RowCount;
int cellCount=dgvCsv1.Rows[0].Cells.Count;
对于(int rowIndex=0;rowIndex,此问题已经解决。LINQ解决方案完全满足您的要求
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
var sb=new StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
因此,最终的代码如下所示:
private void btnSave_Click(object sender, EventArgs e)
{
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
}
private void btnSave\u单击(对象发送者,事件参数e)
{
var sb=新的StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
textBoxExport.Text=sb.ToString();
System.IO.File.writealText(lblFilePath.Text,textBoxExport.Text);
}
这已经解决了。LINQ解决方案正是您想要的
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
var sb=new StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
因此,最终的代码如下所示:
private void btnSave_Click(object sender, EventArgs e)
{
var sb = new StringBuilder();
var headers = dgvCsv1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "\"" + column.HeaderText + "\"").ToArray()));
foreach (DataGridViewRow row in dgvCsv1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "\"" + cell.Value + "\"").ToArray()));
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(lblFilePath.Text, textBoxExport.Text);
}
private void btnSave\u单击(对象发送者,事件参数e)
{
var sb=新的StringBuilder();
var headers=dgvCsv1.Columns.Cast();
sb.AppendLine(string.Join(“,”,headers.Select(column=>“\”+column.HeaderText+“\”).ToArray());
foreach(dgvCsv1.Rows中的DataGridViewRow行)
{
var cells=row.cells.Cast();
sb.AppendLine(string.Join(“,”,cells.Select(cell=>“\”+cell.Value+“\”).ToArray());
}
textBoxExport.Text=sb.ToString();
System.IO.File.writealText(lblFilePath.Text,textBoxExport.Text);
}
删除最后一个分隔符(逗号)
您已经有了列数ColumnCount,
,因此,在循环遍历列时,需要简单检查currentColumn
是否“小于”列数ColumnCount
-1。如果currentColumn
小于ColumnCount
-1,则需要添加“逗号”,
。如果currentColumn
不“小于”ColumnCount
,则这只能意味着一件事……这是最后一列,而不是添加要添加新行的逗号
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
最后,不清楚为什么要使用TextBox
来存储CSV字符串。我建议使用StringBuilder。
下面是上述内容的一个示例
private void btnSave_Click(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder();
int RowCount = dgvCsv1.RowCount;
int ColumnCount = dgvCsv1.ColumnCount;
// get column headers
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
sb.Append(dgvCsv1.Columns[currentCol].Name);
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
// get the rows data
for (int currentRow = 0; currentRow < RowCount; currentRow++) {
if (!dgvCsv1.Rows[currentRow].IsNewRow) {
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
}
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
}
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
}
private void btnSave\u单击(对象发送者,事件参数e){
StringBuilder sb=新的StringBuilder();
int RowCount=dgvCsv1.RowCount;
int ColumnCount=dgvCsv1.ColumnCount;
//获取列标题
对于(int currentCol=0;currentCol
删除最后一个分隔符(逗号)
您已经有了列数ColumnCount,
,因此,在循环遍历列时,需要简单检查currentColumn
是否“小于”列数ColumnCount
-1。如果currentColumn
小于ColumnCount
-1,则需要添加“逗号”,
。如果currentColumn
不“小于”ColumnCount
,则这只能意味着一件事……这是最后一列,而不是添加要添加新行的逗号
if (currentCol < ColumnCount - 1) {
textBoxExport.Text += ",";
}
else {
textBoxExport.Text += Environment.NewLine;
}
最后,不清楚为什么要使用TextBox
来存储CSV字符串。我建议使用StringBuilder。
下面是上述内容的一个示例
private void btnSave_Click(object sender, EventArgs e) {
StringBuilder sb = new StringBuilder();
int RowCount = dgvCsv1.RowCount;
int ColumnCount = dgvCsv1.ColumnCount;
// get column headers
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
sb.Append(dgvCsv1.Columns[currentCol].Name);
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
// get the rows data
for (int currentRow = 0; currentRow < RowCount; currentRow++) {
if (!dgvCsv1.Rows[currentRow].IsNewRow) {
for (int currentCol = 0; currentCol < ColumnCount; currentCol++) {
if (dgvCsv1.Rows[currentRow].Cells[currentCol].Value != null) {
sb.Append(dgvCsv1.Rows[currentRow].Cells[currentCol].Value.ToString());
}
if (currentCol < ColumnCount - 1) {
sb.Append(",");
}
else {
sb.AppendLine();
}
}
}
}
textBoxExport.Text = sb.ToString();
System.IO.File.WriteAllText(@"D:\Test\DGV_CSV_EXPORT.csv", sb.ToString());
}
private void btnSave\u单击(对象发送者,事件参数e){
StringBuilder sb=新的StringBuilder();
int RowCount=dgvCsv1.RowCount;
int ColumnCount=dgvCsv1.ColumnCount;
//获取列标题
对于(int currentCol=0;currentCol