当前位置:   article > 正文

C#对DataGridView控件的常用操作_c#datagridview控件

c#datagridview控件

  1998年我开始接触Powerbuilder 6.5之前,使用过FoxPro 2.5B和Visual Base 5,比较而言,对数据库应用的开发,FoxPro 2.5B对开发人员很友好,开发程序速度快,Visual Base 5则几乎没有多少的优势,VB5的好处是上手快、开发多媒体程序或者office相关应用比较顺手,用上Powerbuilder 6.5就觉得它真是一款神器,一旦用上了就很难罢手,到目前为止,我依然认为它是最好的数据库应用开发工具,没有之一,开发起来快得不可思议。

  Powerbuilder 6.5的最大特点就是数据窗口的应用,只要你能想的到的功能几乎都可以快速实现,并且它可以做到完全的面向对象开发,唯一缺点是界面处理上,有些功能(比如多媒体处理)需要借助Windows API或者第三方插件来完成。

  比如在表格上嵌套表格,表格上嵌套复杂的下拉列表、单选、多选或者其他的选项等实现起来轻而易举,代码非常少。
  数据窗口技术让Powerbuilder开发数据库应用特别方便,速度快、稳定性也很好。

  现在使用C#开发数据库应用,对比20多年前的开发,觉得微软那么多聪明绝顶的工程师们真是浪得虚名,不知道他们这些年都做了些什么?!DataGridView是功能强大,堪比Powerbuilder的数据窗口,问题是使用起来太不方便了!!!为什么就不能借鉴一下开发出让编程人员便利的控件呢?!

  目前需要写一个数据库应用程序,用了C#的DataGridView,总结一下。

  一、数据加载与绑定

  1. try
  2. {
  3. //连接数据库提取管道信息
  4. using (SqlConnection SqlConn = new SqlConnection(DBConnectStr))
  5. {
  6. SqlConn.Open();
  7. SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM PRASPipeline", SqlConn);
  8. DataGridViewDT = new DataTable();
  9. SDA.Fill(DataGridViewDT);
  10. //设置DataGridView的数据源
  11. dataGridView1.DataSource = DataGridViewDT;
  12. }
  13. }
  14. catch (Exception ex)
  15. {
  16. MessageBox.Show("初始化数据出错:"+ex.Message);
  17. }

  二、样式设定

  1. //设置标题栏
  2. dataGridView1.Columns["F01"].HeaderText = "标题1";
  3. //......
  4. dataGridView1.Columns["F15"].HeaderText = "标题15";
  5. dataGridView1.DefaultCellStyle.Font = new Font("宋体", 9);//设置正文的字体
  6. dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9);//设置标题栏的字体
  7. dataGridView1.AutoResizeColumns();
  8. dataGridView1.AutoSizeColumnsMode = (DataGridViewAutoSizeColumnsMode)DataGridViewAutoSizeColumnMode.AllCells;//设置栏目的宽度为自适应
  9. dataGridView1.Columns["F01"].Width = 80;//设置栏目为固定宽度
  10. dataGridView1.RowHeadersVisible = true;//显示行号
  11. dataGridView1.RowHeadersDefaultCellStyle.Padding=new Padding(3);
  12. dataGridView1.RowTemplate.Height = 30;
  13. dataGridView1.AllowUserToAddRows = false;//最后一行不显示
  14. dataGridView1.AlternatingRowsDefaultCellStyle.BackColor= Color.LightGray;//斑马线效果

  三、数据增加

  1. DataTable DT = (DataTable)dataGridView1.DataSource;
  2. DataRow NewRow=DT.NewRow();
  3. DT.Rows.Add(NewRow);
  4. dataGridView1.Refresh();

  四、删除

  1. int SelectRow = dataGridView1.SelectedRows[0].Index;
  2. dataGridView1.Rows.RemoveAt(SelectRow);

  五、数据保存

  1. DataTable ChangedDT=((DataTable)dataGridView1.DataSource).GetChanges();
  2. //保存数据
  3. using(SqlConnection DBConn=new SqlConnection(DBConnectStr))
  4. {
  5. //创建Adapter对象
  6. using(SqlDataAdapter adapter=new SqlDataAdapter("SELECT * FROM PRASPipeline", DBConn))
  7. {
  8. //创建SqlCommandBuilder对象,用于自动生成插入、删除和更新的SQL语句
  9. using(SqlCommandBuilder SCB=new SqlCommandBuilder(adapter))
  10. {
  11. //设置InsertCommand、DeleteCommand、UpdateCommand的属性
  12. adapter.InsertCommand=SCB.GetInsertCommand();
  13. adapter.UpdateCommand=SCB.GetUpdateCommand();
  14. adapter.DeleteCommand=SCB.GetDeleteCommand();
  15. DBConn.Open() ;
  16. adapter.Update(ChangedDT);
  17. DBConn.Close();
  18. }
  19. }
  20. }

  下面的代码更简洁:

  1. string UpdateSql = "";
  2. //得到UpdateSql的详细信息
  3. DataTable ModifyDT = ((DataTable)dataGridView1.DataSource).GetChanges();
  4. if (ModifyDT != null)
  5. {
  6. //创建SqlDataAdapter对象,用于更新数据库中的数据
  7. SqlDataAdapter UpdateAdapter = new SqlDataAdapter(UpdateSql, MySqlConn);
  8. //创建SqlCommonBuilder对象,用于自动生成更新数据库的命令
  9. SqlCommandBuilder SCB = new SqlCommandBuilder(UpdateAdapter);
  10. //更新数据
  11. UpdateAdapter.Update(ModifyDT);
  12. MessageBox.Show("保存成功!", "提示");
  13. }

  六、从Excel导入

  ⑴选择

  1. OpenFileDialog openFileDialog = new OpenFileDialog();
  2. openFileDialog.Filter = "Excel文件(*.xlsx;*.xls)|*.xlsx;*.xls";
  3. if (openFileDialog.ShowDialog() == DialogResult.OK)
  4. {
  5. string StrPath = openFileDialog.FileName;
  6. //将Excel文件记录追加到DataGridView中
  7. AppendExcelDataToDataGridView(StrPath);
  8. }

  ⑵导入

  1. private void AppendExcelDataToDataGridView(string StrFilePath)
  2. {
  3. try
  4. {
  5. //根据Excel文件路径和连接字符串创建连接对象
  6. string LinkExcelStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={StrFilePath};Extended Properties='Excel 12.0;HDR=YES'";
  7. string SQLStr = "SELECT * FROM [Sheet1$]";
  8. using (OleDbConnection ExcelDB = new OleDbConnection(LinkExcelStr))
  9. {
  10. using (OleDbDataAdapter ODA = new OleDbDataAdapter(SQLStr, ExcelDB))
  11. {
  12. DataTable ExcelDT = new DataTable();
  13. ODA.Fill(ExcelDT);
  14. //将数据追加到DataGridView中
  15. //DataGridViewDT.Merge(ExcelDT,true);
  16. foreach (DataRow Row in ExcelDT.Rows)
  17. {
  18. DataGridViewDT.Rows.Add(Row.ItemArray);
  19. }
  20. //foreach (DataRow row in ExcelDT.Rows)
  21. //{
  22. // DataRow NewRow=DataGridViewDT.NewRow();
  23. // for(int i=0;i<ExcelDT.Columns.Count;i++)
  24. // {
  25. // NewRow[i] = row[i];
  26. // }
  27. // DataGridViewDT.Rows.Add(NewRow);
  28. //}
  29. }
  30. }
  31. }
  32. catch (Exception ex)
  33. {
  34. MessageBox.Show("追加数据到DataGridView中出错!" + ex.Message);
  35. }
  36. }

  DataGridView中添加下拉列表、添加按钮、图片、链接、文本框,不是很方便,需要单独进行总结。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/419053
推荐阅读
  

闽ICP备14008679号