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,总结一下。

  一、数据加载与绑定

            try
            {
                //连接数据库提取管道信息
                using (SqlConnection SqlConn = new SqlConnection(DBConnectStr))
                {
                    SqlConn.Open();
                    SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM PRASPipeline", SqlConn);
                    DataGridViewDT = new DataTable();
                    SDA.Fill(DataGridViewDT);
                    //设置DataGridView的数据源
                    dataGridView1.DataSource = DataGridViewDT;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("初始化数据出错:"+ex.Message);
            }

  二、样式设定

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

  三、数据增加

            DataTable DT = (DataTable)dataGridView1.DataSource;
            DataRow NewRow=DT.NewRow();            
            DT.Rows.Add(NewRow);
            dataGridView1.Refresh();

  四、删除

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

  五、数据保存

            DataTable ChangedDT=((DataTable)dataGridView1.DataSource).GetChanges();
            //保存数据
            using(SqlConnection DBConn=new SqlConnection(DBConnectStr))
            {
                //创建Adapter对象
                using(SqlDataAdapter adapter=new SqlDataAdapter("SELECT * FROM PRASPipeline", DBConn))
                {
                    //创建SqlCommandBuilder对象,用于自动生成插入、删除和更新的SQL语句
                    using(SqlCommandBuilder SCB=new SqlCommandBuilder(adapter))
                    {
                        //设置InsertCommand、DeleteCommand、UpdateCommand的属性
                        adapter.InsertCommand=SCB.GetInsertCommand();
                        adapter.UpdateCommand=SCB.GetUpdateCommand();
                        adapter.DeleteCommand=SCB.GetDeleteCommand();
                        DBConn.Open() ;
                        adapter.Update(ChangedDT);
                        DBConn.Close();
                    }

                }

            }

  下面的代码更简洁:

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

  六、从Excel导入

  ⑴选择

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

  ⑵导入

       private void AppendExcelDataToDataGridView(string StrFilePath)
        {
            try
            {
                //根据Excel文件路径和连接字符串创建连接对象
                string LinkExcelStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={StrFilePath};Extended Properties='Excel 12.0;HDR=YES'";
                string SQLStr = "SELECT * FROM [Sheet1$]";

                using (OleDbConnection ExcelDB = new OleDbConnection(LinkExcelStr))
                {
                    using (OleDbDataAdapter ODA = new OleDbDataAdapter(SQLStr, ExcelDB))
                    {
                        DataTable ExcelDT = new DataTable();
                        ODA.Fill(ExcelDT);
                        //将数据追加到DataGridView中
                        //DataGridViewDT.Merge(ExcelDT,true);
                        foreach (DataRow Row in ExcelDT.Rows)
                        {
                            DataGridViewDT.Rows.Add(Row.ItemArray);
                        }
                        //foreach (DataRow row in ExcelDT.Rows)
                        //{
                        //    DataRow NewRow=DataGridViewDT.NewRow();
                        //    for(int i=0;i<ExcelDT.Columns.Count;i++)
                        //    {
                        //        NewRow[i] = row[i];
                        //    }
                        //    DataGridViewDT.Rows.Add(NewRow);
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("追加数据到DataGridView中出错!" + ex.Message);
            }
        }

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值