赞
踩
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中添加下拉列表、添加按钮、图片、链接、文本框,不是很方便,需要单独进行总结。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。