标签:
对于有些小型的程序,数据的存储,第一容量不是很大,且存储方便,并不不需要用户机上安装数据库那么麻烦。不妨采用excel存储的方式来实现数据的读写。
如果使用excel进行读写,需要引用一个叫Mrcrosoft.Ofiice.Interop.Excel.dll的类库。
并且需要在代码编辑区,添加命名空间
如下:
using Microsoft.Office.Interop.Excel;
*对excel表格进行读取数据,显示在datagridview1里
//读取excel里面的数据
private void readEXCEL()
{
//string Current;
//Current = Directory.GetCurrentDirectory();
//string filename = Current + @"\test.xls";
try
{
ds.Clear();
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + txt_path.Text + ";Extended Properties=‘Excel 12.0;HDR=NO;IMEX=1‘"))
{
using (OleDbDataAdapter da = new OleDbDataAdapter("Select F1 as 姓名 , F2 as 电话号码 from [" + comboBox1.Text + "]", conn))
{
da.Fill(ds, "xlssheet");
}
}
dataGridView1.DataSource = ds.Tables["xlssheet"];
dataGridView1.AutoGenerateColumns = true;
dataGridView1.Columns[0].ReadOnly = false;
dataGridView1.Columns[1].ReadOnly = true;
dataGridView1.Columns[2].ReadOnly = true;
}
catch (Exception ex)
{
MessageBox.Show("打开EXCEL文件遇到错误,请检查是否合法的excel文件/n" + ex.Message);
}
}
*将数据写入excel中
public bool WriteXLS(string filename)
{
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
_Workbook book = xls.Workbooks.Open(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
_Worksheet sheet;
xls.Visible = false;
xls.DisplayAlerts = false;
for (int i = 0; i < comboBox1.Items.Count; i++)
{
sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[i + 1];
if (sheet.Name+"$" == comboBox1.Text)
{
sheet.Cells[(row + 1), 1] = dataGridView1.Rows[row].Cells[1].Value.ToString();
sheet.Cells[(row + 1), 2] = dataGridView1.Rows[row].Cells[2].Value.ToString();
textBox1.Text = "成功";
break;
}
else
{
continue;
}
}
book.Save();
book.Close(false, Missing.Value, Missing.Value);
xls.Quit();
sheet = null;
book = null;
xls = null;
GC.Collect();
return true;
}
另外需要提到的技巧是有关,怎么通过datagridview1显示的数据,直接在表格里面进行数据修改,然后会写进excel中。确保数据实时更新的问题。这需要使用datagridview1里面的dataGridView1_RowLeave事件和dataGridView1_CellDoubleClick事件配合使用。代码如下:
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.Columns[1].ReadOnly = true;
dataGridView1.Columns[2].ReadOnly = true;
//textBox1.Text = dataGridView1.Rows[row].Cells[1].Value.ToString();
if (name == "" && number == "")
{
}
else
{
//WriteXLS(txt_path.Text);//写入数据
textBox1.Text = "success!";
name = dataGridView1.Rows[row].Cells[1].Value.ToString();
number = dataGridView1.Rows[row].Cells[2].Value.ToString();
WriteXLS(txt_path.Text);
name = "";
number = "";
}
}
int row=0;
string name = string.Empty;
string number = string.Empty;
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.Columns[1].ReadOnly = false;
dataGridView1.Columns[2].ReadOnly = false;
row = dataGridView1.CurrentRow.Index;
name = dataGridView1.Rows[row].Cells[1].Value.ToString();
number = dataGridView1.Rows[row].Cells[2].Value.ToString();
if (name == "" && number == "") {
name = number = "1";
}
}
标签:
原文地址:http://my.oschina.net/RabbitXiao/blog/486998