var style = new DataGridTableStyle { MappingName = "MyTable" };
var col = new DataGridTextBoxColumn {
MappingName = "title_id",
HeaderText = "標題 ID"
};
style.GridColumnStyles.Add(col);
dataGrid1.TableStyles.Add(style);
// SQL
WHERE column_name IS NULL
// DataTable.Select
var rows = dt.Select("ColumnName IS NULL");
// SQL Server
SELECT CONVERT(varchar(10), DateCol, 120) AS DateOnly -- yyyy-MM-dd
// 或
SELECT CAST(DateCol AS DATE) AS DateOnly
// DataGrid 欄位格式化
dataGridView1.Columns["DateCol"].DefaultCellStyle.Format = "yyyy-MM-dd";
// SQL
SELECT col1 + col2 AS Merged FROM Table -- SQL Server
SELECT col1 || col2 AS Merged FROM Table -- Oracle
// DataTable Expression
var dc = new DataColumn("FullName", typeof(string)) {
Expression = "FirstName + ' ' + LastName"
};
dt.Columns.Add(dc);
private void ExportToExcel(DataTable dt) {
var excel = new Microsoft.Office.Interop.Excel.Application();
excel.Workbooks.Add(true);
var ws = (Worksheet)excel.ActiveSheet;
// 標題列
for (int c = 0; c < dt.Columns.Count; c++)
ws.Cells[1, c + 1] = dt.Columns[c].ColumnName;
// 資料列
for (int r = 0; r < dt.Rows.Count; r++)
for (int c = 0; c < dt.Columns.Count; c++)
ws.Cells[r + 2, c + 1] = dt.Rows[r][c];
// 邊框
var range = ws.Range[ws.Cells[1, 1], ws.Cells[dt.Rows.Count + 1, dt.Columns.Count]];
range.Borders.LineStyle = XlLineStyle.xlContinuous;
range.Borders.Weight = XlBorderWeight.xlThin;
// 標題列凍結、置中
ws.Rows[1].HorizontalAlignment = XlHAlign.xlHAlignCenter;
ws.PageSetup.PrintTitleRows = "$1:$1";
ws.PageSetup.CenterFooter = "第 &P 頁 / 共 &N 頁";
// 數字格式保留前導零
ws.Columns["A"].NumberFormat = "0000";
excel.Visible = true;
}
for (int i = 0; i < count; i++) {
// ... 匯出邏輯
dataGrid1.CaptionText = $"匯出中:{i+1}/{count}";
Application.DoEvents(); // 讓 UI 重繪
}
// SQL Server
SELECT * FROM Table WHERE Column LIKE '%' + @Keyword + '%'
// C# 參數
cmd.Parameters.AddWithValue("@Keyword", keyword);
SELECT * FROM Table
WHERE ASCII(SUBSTR(Column, 1, 1)) BETWEEN ASCII('A') AND ASCII('Z')
// 錯誤:(int)cmd.ExecuteScalar() 可能為 DBNull
int id = Convert.ToInt32(cmd.ExecuteScalar()); // 安全處理 DBNull
// C#
DateTime.Now
// SQL Server
GETDATE()
// Oracle
SYSDATE
// 方式 1:表單 AcceptButton
this.AcceptButton = btnOK;
// 方式 2:KeyPress 事件
private void txt_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == (char)Keys.Enter) {
e.Handled = true; // 避免嗶聲
btnOK.PerformClick();
}
}
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
private void txt_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == '+') {
SendKeys.Send("A");
e.Handled = true;
}
}
this.WindowState = FormWindowState.Maximized;
this.dataGrid1.MouseWheel += (s, e) => this.dataGrid1.Select();
dataGrid1.Select();
SendKeys.Send("{PGUP}"); // 上一頁
SendKeys.Send("{PGDN}"); // 下一頁
SendKeys.Send("^{LEFT}"); // Ctrl+左
SendKeys.Send("^{RIGHT}"); // Ctrl+右
dataGrid1.DataSource = ds; dataGrid1.DataMember = "ParentTable";
dataGrid2.DataSource = ds; dataGrid2.DataMember = "ParentTable.RelationName";
foreach (DataRow dr1 in ds.Tables["A1"].Rows) {
var n1 = treeView1.Nodes.Add(dr1["Name"].ToString());
foreach (DataRow dr2 in dr1.GetChildRows("A1A2")) {
var n2 = n1.Nodes.Add(dr2["Name"].ToString());
foreach (DataRow dr3 in dr2.GetChildRows("A2A3"))
n2.Nodes.Add(dr3["Name"].ToString());
}
}
// Form2
public delegate void SendDataHandler(string data);
public event SendDataHandler DataSent;
private void btnOK_Click(object sender, EventArgs e) {
DataSent?.Invoke(txtInput.Text);
this.Close();
}
// Form1
var f2 = new Form2();
f2.DataSent += data => txtResult.Text = data;
f2.ShowDialog();
// AssemblyInfo.cs
[assembly: AssemblyVersion("1.0.*")] // 建置日期/時間編碼
sn -k key.snk
// AssemblyInfo.cs
[assembly: AssemblyKeyFile("key.snk")]
// 建置後
gacutil /i MyLib.dll
var ver = System.Diagnostics.FileVersionInfo
.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location)
.FileVersion;
Setup.exe、.msi[RunInstaller(true)]
public class DbInstaller : Installer {
public override void Install(IDictionary stateSaver) {
base.Install(stateSaver);
ExecuteSql("master", "CREATE DATABASE MyDB");
ExecuteSql("MyDB", GetEmbeddedSql("CreateTables.sql"));
}
// 將 .sql 設為 Embedded Resource 並用 GetManifestResourceStream 讀取
}
// Flash ActionScript
fscommand("exec", "App.exe");
// 需發布為 .exe,並在同目錄下建 fscommand 資料夾放 App.exe
// CMD
sc delete "ServiceName"
// 或 註冊表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
.vssscc, .vspscc 檔案public static string SerializeToXml(object obj) {
using var sw = new StringWriter();
new XmlSerializer(obj.GetType()).Serialize(sw, obj);
return sw.ToString();
}
// 存入 Access Memo/LongText 欄位
IEnumerable 回傳 IEnumeratorGetEnumerator()、MoveNext()、Currentforeach 只需 GetEnumerator() + MoveNext() + Currentbase(...) 傳參sealed → 無法繼承New-Alias -Name "list" -Value "Get-ChildItem"
New-Alias -Name "w" -Value "Get-WmiObject" -Description "WMI 別名" -Option ReadOnly
<body onkeydown="if(event.keyCode==38) __doPostBack('ImageButton1','')">
// 需頁面有 LinkButton 等產生 __doPostBack,否則手動註冊
| 表示式 | 意義 | 記憶體 |
|---|---|---|
null | 無參考,未指向任何物件 | 無物件 |
"" | 空字串物件 | 新物件 (但會被暫存池優化) |
string.Empty | 空字串單例 | 共用靜態實例 |
// .NET 2.0+ 推薦
if (string.IsNullOrEmpty(s)) { ... }
if (string.IsNullOrWhiteSpace(s)) { ... }
這 33 個技巧涵蓋 WinForms 開發最常見場景:資料呈現、資料庫存取、UI 互動、匯出報表、部署安裝、跨技術整合。建議將常用片段整理成個人程式碼片段庫 (Snippets),並搭配單元測試驗證邊界條件,提升開發效率與程式碼品質。