1998 年に Powerbuilder 6.5 に出会うまで、私は FoxPro 2.5B と Visual Base 5 を使用していました。それに比べて、データベース アプリケーションの開発では、FoxPro 2.5B は開発者にとって非常に使いやすく、開発速度が速いのに対し、Visual Base 5 「メリットはほとんどありません。VB5 のメリットは、すぐに始められることと、マルチメディア プログラムやオフィス関連のアプリケーションの開発が容易なことです。Powerbuilder 6.5 を使用してみると、本当に成果物であると感じます。一度使ってみると、これまでのところ、最高のデータベース アプリケーション開発ツールはありませんが、開発は信じられないほど高速です。
Powerbuilder 6.5 の最大の特徴は、データ ウィンドウの適用です。考えられるほぼすべての機能がすぐに実装でき、完全なオブジェクト指向開発が実現できます。唯一の欠点は、インターフェイス処理で一部の機能 (マルチメディア処理) これは、Windows API またはサードパーティのプラグインを使用して実行する必要があります。
たとえば、テーブル上のテーブルのネスト、複雑なドロップダウン リストのネスト、テーブル上のラジオ選択、複数選択、またはその他のオプションは、非常に少ないコードで簡単に実装できます。
データ ウィンドウ テクノロジを使用すると、Powerbuilder が高速かつ安定してデータベース アプリケーションを開発するのに特に便利になります。
今ではデータベースアプリケーションの開発にはC#が使われるようになりましたが、20年以上前の開発と比べると、マイクロソフト社の優秀なエンジニアの方々は本当に徒労に感じますが、彼らはここ数年何をしていたのでしょうか?!DataGridView は Powerbuilder に匹敵する強力なデータ ウィンドウですが、問題は、使いにくいことです。!!なぜそこから学んで、プログラマーにとって便利なコントロールを開発できないのでしょうか? !
現在、C# の DataGridView を使用してデータベース アプリケーションを作成する必要があるので、まとめてみましょう。
1. データのロードとバインド
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);
}
2. スタイルの設定
//设置标题栏
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;//斑马线效果
3. データの増加
DataTable DT = (DataTable)dataGridView1.DataSource;
DataRow NewRow=DT.NewRow();
DT.Rows.Add(NewRow);
dataGridView1.Refresh();
4. 削除
int SelectRow = dataGridView1.SelectedRows[0].Index;
dataGridView1.Rows.RemoveAt(SelectRow);
5. データストレージ
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("保存成功!", "提示");
}
6. 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 にドロップダウン リスト、ボタン、画像、リンク、テキスト ボックスを追加するのはあまり便利ではないため、個別にまとめる必要があります。