C# data_gridview 应用 博客分类: C#oracle数据库 c#data_gridview数据绑定导出excel
1.数据绑定
a.编辑列
在Windows窗体上新建一个DataGridView,修改名称为dg_user,选中dg_user,右击鼠标,选择“编辑列”,添加列user_id,user_name,plant_name,如图:
注意:DataPropertyName应和SQL语句查询的字段名保持一致,HeaderText为界面显示的列名,Visible表示界面是否显示该列(例如ID列一般不需要显示给用户,但是可能会作为删除等操作的行标,所以将该列设置为隐藏列)。
b.连接数据库
获取与数据库的连接,通过SQL查询语句查询表ljj_usertable 中user_id, user_name, plant_name 字段的信息,存储在DataTable 中,代码如下:
public DataTable get_users() { OracleConnection conn = null; OracleTransaction tran = null; OracleCommand cmd = null; try { StringBuilder str = new StringBuilder(); str.Append("select user_id,user_name,plant_name from ljj_usertable "); conn = new OracleConnection("Data Source=XX;Persist Security Info=True;User ID=XXX;Password=XXXX"); conn.Open(); tran = conn.BeginTransaction(); cmd = new OracleCommand(str.ToString(), conn, tran); DataSet ds = new DataSet(); OracleDataAdapter oda = new OracleDataAdapter(cmd); oda.Fill(ds); DataTable dt = ds.Tables[0]; tran.Commit(); conn.Close(); return dt; } catch (Exception e) { throw e; } finally { if (null != conn) conn.Close(); } }
c.数据显示
将方法get_users()获得的DataTable 显示在data_gridview中,代码如下:
public void show_users() { this.dg_user.DataSource = this.get_users().DefaultView; this.dg_user.Refresh(); }
刷新表格时运行方法show_users(),数据库表相应的数据就显示在data_gridview中啦。
2.将data_gridview中的数据导出为excel文件
a.筛选有效数据
获取datagridview中的数据保存在EXCEL文件中,一般情况下,隐藏列是程序员使用的,不需要展现给用户,所以保存在EXCEL文件中的数据需要去掉隐藏列,方法如下:
public DataTable SiftData(DataGridView datagridview) { try { DataTable dt = new DataTable(); DataTable columnname_Table = new DataTable(); for (int column = 0; column < datagridview.Columns.Count; column++) { if (datagridview.Columns[column].Visible == false) { continue; } dt.Columns.Add( new DataColumn(datagridview.Columns[column].HeaderText, typeof(string))); columnname_Table.Columns.Add(new DataColumn(datagridview.Columns[column].Name, typeof(string))); } for (int row = 0; row < datagridview.Rows.Count; row++) { if (datagridview.Rows[row].Visible == false) { continue; } DataRow tempRow = dt.NewRow(); for (int i = 0; i < dt.Columns.Count; i++) { tempRow[i] = datagridview.Rows[row].Cells[columnname_Table.Columns[i].ColumnName].Value; } dt.Rows.Add(tempRow); } return dt; }
b.将得到的数据导出为excel表格
首先在窗口上添加一个控件SaveFileDialog,命名为sdg_filename,
代码结构分四步:
(1)设置工作簿,工作表和单元格;
(2)根据datatable中的数据向excel表中写入列名
(3)写入数据
(4)保存文件
代码如下:
private void exportExcelByTable(DataTable dataTable) { try { int colIndex = 0; Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook(); Aspose.Cells.Worksheet sheet = workbook.Worksheets[0]; Aspose.Cells.Cells cells = sheet.Cells; foreach (DataColumn dc in dataTable.Columns) { cells[0, colIndex].PutValue(dc.ColumnName); colIndex++; } for (int i = 0; i < dataTable.Rows.Count; i++) { for (int j = 0; j < dataTable.Columns.Count; j++) { cells[i + 1, j].PutValue(dataTable.Rows[i][j].ToString()); } } sdg_filename.Filter = " xls files(*.xls)|"; sdg_filename.FileName = DateTime.Now.ToString("yyyyMMdd") + "-" + "用户信息表.xls"; sdg_filename.FilterIndex = 2; sdg_filename.RestoreDirectory = true; if (sdg_filename.ShowDialog() == DialogResult.OK) { workbook.Save(sdg_filename.FileName.ToString()); } } catch (Exception e) { throw e; } }
运行函数:exportExcelByTable(SiftData(this.dg_user));
c.打开文件
System.Diagnostics.Process.Start(sdg_filename.FileName);
打开文件可以和保存文件写在一起,这样保存成功就直接打开了,非常实用。
到这里,DataGridView的绑定数据和导出数据就介绍完了,DataGridView控件使用灵活,还有很多方法,可以参照系统提供的事件进行学习。