最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教
1.直接绑定数据源,可以绑定的数据格式有List<T>,DataTable,DataSet等,
this.dataGridView1.DataSource = list;
this.dataGridView1.DataSource = table;
this.dataGridView1.DataSource =ds.Tables["表名"];
2.手动绑定datagridview指定列的数据,datagridview列如下图:
绑定数据代码如下:
DataTable dt = cdh.checkDB_typeValue(list_rd); if (dt.Rows.Count>0) { //dataGridView2.DataSource = dt; for (int i = 0; i < dt.Rows.Count; i++) { DataGridViewRow dr = new DataGridViewRow(); dataGridView2.Rows.Add(dr); dataGridView2.Rows[i].Cells["档案类型"].Value = dt.Rows[i]["档案类型"].ToString(); dataGridView2.Rows[i].Cells["字段"].Value = dt.Rows[i]["字段"].ToString(); dataGridView2.Rows[i].Cells["错误类型"].Value = dt.Rows[i]["错误类型"].ToString(); dataGridView2.Rows[i].Cells["错误数据"].Value = dt.Rows[i]["错误数据"].ToString(); dataGridView2.Rows[i].Cells["档案号"].Value = dt.Rows[i]["档案号"].ToString(); } btn_export.Enabled = true; }
3.自动生成datagridview控件并绑定数据和单元格点击事件
foreach (KeyValuePair<string, List<string>> item in ckImageMethod.errorFiles) { //实例化tabpage对象 TabPage tpage = new TabPage(); tpage.Text = item.Key; tpage.AutoScroll = true; //实例化datagridview对象 DataGridView dgv = new DataGridView(); dgv.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; dgv.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; dgv.Location = new System.Drawing.Point(3, 3); dgv.Size = new System.Drawing.Size(tabControl2.Width - 15, tabControl2.Height - 35); //给datagridview添加单元格点击事件 dgv.CellContentClick += Dgv_CellContentClick; //给datagridview添加文本列 DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn(); col1.HeaderText = "文件名"; DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn(); col2.HeaderText = "文件路径"; //添加按钮列 DataGridViewButtonColumn col3 = new DataGridViewButtonColumn(); col3.HeaderText = "操作"; col3.Name = "btnModify"; col3.DefaultCellStyle.NullValue = "打开文件"; dgv.Columns.Add(col1); dgv.Columns.Add(col2); dgv.Columns.Add(col3); foreach (string filePath in item.Value) { string path = filePath; //给datagridview添加一行数据,因为第三列时按钮,所以不添加值也会默认添加按钮 dgv.Rows.Add(path.Substring(path.LastIndexOf('\\') + 1), path); } //添加datagridview控件到tabpage中 tpage.Controls.Add(dgv); //添加tabpage到tabControl中 tabControl2.TabPages.Add(tpage); }
单元格点击事件:
private void Dgv_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = sender as DataGridView; //点击button按钮事件 if (dgv.Columns[e.ColumnIndex].Name == "btnModify" && e.RowIndex >= 0) { if (e.RowIndex == (dgv.RowCount - 1)) { return; } //说明点击的列是DataGridViewButtonColumn列 string path = dgv.Rows[e.RowIndex].Cells[1].Value.ToString(); if (Directory.Exists(path)) { //打开文件夹 System.Diagnostics.Process.Start(path); } else { //打开文件所在文件夹 DirectoryInfo fi = new DirectoryInfo(path); System.Diagnostics.Process.Start(fi.Parent.FullName); } } }