1998年我开始接触Powerbuilder 6.5之前,使用过FoxPro 2.5B和Visual Base 5,比较而言,对数据库应用的开发,FoxPro 2.5B对开发人员很友好,开发程序速度快,Visual Base 5则几乎没有多少的优势,用上Powerbuilder 6.5就觉得它真是一款神器,到目前为止,我依然认为它是最好的数据库应用开发工具,没有之一,开发起来快得不可思议。
Powerbuilder 6.5的最大特点就是数据窗口的应用,只要你能想的到的功能几乎都可以快速实现,并且它可以做到完全的面向对象开发,唯一缺点是界面处理上,有些功能(比如多媒体处理)需要借助Windows API或者第三方插件来完成。
比如在表格上嵌套表格,表格上嵌套复杂的下拉列表、单选、多选或者其他的选项等实现起来轻而易举,代码非常少。
现在使用C#开发数据库应用,对比20多年前的开发,觉得微软那么多聪明绝顶的工程师们真是浪得虚名,不知道他们这些年都做了些什么?!为什么就不能借鉴一下开发出让编程人员便利的控件呢?!
用了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();
}
}
}
六、为列增加下拉框
七、为列增加单选框
八、为列增加复选框
九、从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);
}
}