C# winform操作CSV格式文件
實例一
實例效果
當在winform界面中點擊讀取按鈕時 將csv中的所有數(shù)據(jù)讀取出來放置在datagridview控件,可以在datagridview控件中編輯數(shù)據(jù),當點擊保存按鈕時 將datagridview控件中的所有數(shù)據(jù)存儲在csv格式文件中。
實現(xiàn)代碼
第一步UI界面搭建

第二步封裝一個csv文件格式的操作類
public class CSVAPI
{
/// <summary>
/// 保存
/// </summary>
/// <param name="date"></param>
/// <param name="data"></param>
/// <param name="result"></param>
/// <param name="fileName"></param>
public void SaveData(string date,string data, string result,string fileName)
{
using (StreamWriter sw2 = new StreamWriter(fileName, true, Encoding.Default))
{
StringBuilder sb = new StringBuilder();
sb.Append(date).Append(",").Append(data).Append(",").Append(result + "\n");
sw2.Write(sb.ToString());
}
}
/// <summary>
/// 讀取CSV
/// </summary>
/// <returns></returns>
public string ReadData(string fileName)
{
StreamReader sr = new StreamReader(fileName, Encoding.Default);
string s = sr.ReadToEnd(); // 讀取數(shù)據(jù)
sr.Close();
sr.Dispose();
return s;
}
}第三步實現(xiàn)按鈕事件
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
CSVAPI csv = new CSVAPI();
string filename = "./data.csv";
/// <summary>
/// 保存
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
if (dataGridView1.Rows.Count>0)
{
// 寫入表頭(將表頭寫死)
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
StringBuilder sb = new StringBuilder(); // 定義可變字符串,保存存儲的數(shù)據(jù)
sb.Append("時間").Append(",").Append("姓名").Append(",").Append("事件");
sw.WriteLine(sb);
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
for (int i = 0; i < this.dataGridView1.RowCount-1; i++)
{
csv.SaveData(this.dataGridView1.Rows[i].Cells[0].Value.ToString()+"", this.dataGridView1.Rows[i].Cells[1].Value.ToString() + "", this.dataGridView1.Rows[i].Cells[2].Value.ToString() + "", filename);
}
}
}
/// <summary>
/// 讀取
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
this.dataGridView1.Rows.Clear();
if (!File.Exists(filename))
{
MessageBox.Show("文件不存在");
return;
}
string[] strings = csv.ReadData(filename).Split('\n');
for (int i = 1;i < strings.Length;i++)
{
if (!string.IsNullOrEmpty(strings[i]))
{
string[] vals = strings[i].Split(',');
this.dataGridView1.Rows.Add(vals);
}
}
}
}效果展示

實例二
實例效果
當在winform界面中點擊讀取按鈕時彈出文件選擇框,用戶選擇指定的csv文件然后將csv中的所有數(shù)據(jù)讀取出來放置在datagridview控件,可以在datagridview控件中編輯數(shù)據(jù),當點擊保存按鈕時 將datagridview控件中的所有數(shù)據(jù)存儲在用戶選擇的csv格式文件路徑中。
完整代碼
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OpenFileDialog ofd = new OpenFileDialog();
//讀取
private void button1_Click(object sender, EventArgs e)
{
//字符串-->dataTable--->dataSource
if(ofd.ShowDialog()==DialogResult.OK)
{
FileStream fs = new FileStream(ofd.FileName, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.Default);//讀取文件流數(shù)據(jù)
string data = "";//讀出每一行的數(shù)據(jù) "name ,age sex"
string[] lines;// 數(shù)據(jù)的數(shù)組
bool isHead = true; // 是否是表頭
DataTable dt = new DataTable();// 為了給datagridview設置數(shù)據(jù)源的類型
while ((data=sr.ReadLine())!=null) //先賦值給data 再判斷data是否為空 ,不為空時候 一直讀取
{
lines= data.Split(','); //把每一行的數(shù)據(jù)使用逗號分隔 [name ,age ,sex]
if(isHead) //是不是表頭[name ,age ,sex]
{
//遍歷表頭數(shù)組 給每一列添加標題
for(int i = 0; i < lines.Length; i++)
{
dt.Columns.Add(lines[i]); //設置dt的列的數(shù)據(jù)源
}
isHead = false;
}
else //不是表頭數(shù)據(jù),每一行表格添加數(shù)據(jù)
{
DataRow d1 = dt.NewRow();// 指定datatable創(chuàng)建行
for (int i = 0; i < lines.Length; i++)
{
d1[i] = lines[i];// 單元格設置值
}
dt.Rows.Add(d1);
}
}
//綁定數(shù)據(jù)源
if (dt.Rows.Count==0) //如果沒行的 證明沒數(shù)據(jù)
{
MessageBox.Show("沒有數(shù)據(jù)","溫馨提示");
}
else
{
//證明有數(shù)據(jù) 展示到控件上
//dataGridView1.DataSource = dt;
// dataGridView1.ColumnCount 列的個數(shù)
dataGridView1.ColumnCount = dt.Columns.Count;
//設置表頭
for (int i = 0; i < dt.Columns.Count; i++)
{
// dataGridView1.Columns[i].HeaderText 表格控件的每一列的標題
dataGridView1.Columns[i].HeaderText = dt.Columns[i].ColumnName;
}
//設置行數(shù)據(jù)
for (int i = 0; i < dt.Rows.Count; i++)
{
//dataGridView1.Rows. 設置表格控件的所有的行
dataGridView1.Rows.Add(dt.Rows[i].ItemArray);
}
}
sr.Close();
fs.Close();
}
}
// 保存
private void button2_Click(object sender, EventArgs e)
{
//dataSource-->dataTable--->string
DataTable dt = new DataTable(); //創(chuàng)建dataTable類型
//設置dt表頭
//遍歷控件列的個數(shù),根據(jù)控件的列的個數(shù)設置dt列
for (int i = 0;i < dataGridView1.Columns.Count;i++)
{
dt.Columns.Add(dataGridView1.Columns[i].HeaderText); //把控件列標題添加到dt列里面
}
//設置dt的行
for (int i = 0; i < dataGridView1.Rows.Count; i++) //遍歷控件幾行
{
DataRow row = dt.NewRow(); //創(chuàng)建行
for (int j = 0; j < dataGridView1.Columns.Count; j++) //遍歷控件幾列
{
//dataGridView1[0,0] 根據(jù)幾行幾列取出表格數(shù)據(jù)
row[j] = dataGridView1[j, i].Value;
}
dt.Rows.Add(row);
}
//把dt數(shù)據(jù)轉(zhuǎn)成字符串進行寫入
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "csv文件(*.csv)|.csv";
if(sfd.ShowDialog()==DialogResult.OK)
{
//開始寫入
FileStream fs = new FileStream(sfd.FileName, FileMode.Create);
StreamWriter sw = new StreamWriter(fs,Encoding.Default);
string data = "";// 寫入的字符串
//表頭轉(zhuǎn)成字符串
for (int i = 0; i < dt.Columns.Count; i++)
{
data += dt.Columns[i].ColumnName;// 把dt列標題取出拼接
if(i <dt.Columns.Count-1)
{
data += ","; // 列之間使用逗號隔開
}
}
sw.WriteLine(data); //寫入表頭
//寫入行數(shù)據(jù)
data = null;//防止表頭數(shù)據(jù)重復寫入
for (int i = 0; i < dt.Rows.Count-1; i++)
{
for (int j = 0; j <dt.Columns.Count; j++)
{
data += dt.Rows[i][j]; //幾行幾列數(shù)據(jù)拼接data
if(j<dt.Columns.Count-1)//不是最后一列
{
data += ",";
}
}
sw.WriteLine(data);//寫入表數(shù)據(jù)
data=null;
}
sw.Close();
fs.Close();
}
}
}1 datagridview 控件的常用屬性
- dataGridView1.Columns 表格控件的所有列
- dataGridView1.Columns .Count 表格控件的所有列的個數(shù)
- dataGridView1.Rows 表格控件的所有行
- dataGridView1[0,0] 根據(jù)幾行幾列取出表格數(shù)據(jù)
- dataGridView1.Columns[i].HeaderTex 表格控件的列的文本內(nèi)容
2 dataTable常用的屬性和方法
- DataTable dt = new DataTable(); 創(chuàng)建dataTable類型
- DataRow row = dt.NewRow(); 創(chuàng)建一行
- dt.Rows.Add(row); 向dataTable添加一行
- dt.Columns.Add(); 向dataTable添加一列
- dt.Columns datatable所有的列
- dt.Rows datatable所有的行
- dt.Columns[i].ColumnName;列標題
以上就是C# winform操作CSV格式文件的詳細內(nèi)容,更多關于C#操作CSV的資料請關注腳本之家其它相關文章!
相關文章
C# StreamReader類實現(xiàn)讀取文件的方法
這篇文章主要介紹了C# StreamReader類實現(xiàn)讀取文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
C#實現(xiàn)帶行數(shù)和標尺的RichTextBox
這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)帶行數(shù)和標尺的RichTextBox,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12

