這篇
[C#] 根據 CheckBox 來顯示 DataGridView 欄位
的延伸,原 PO 是根據 DataGridView 欄位數,動態在另外一個 Form 內產生 CheckBox,來讓使用者勾選是否顯示欄位,之前想的太簡單了
建立 ColumnState Class 來當成傳遞參數
namespace CheckBox2ShowColumn2
public class ColumnState
public string ColName{get;set;}
public Boolean ColVisible{get;set;}
Grid 為開始 Form,使用者可以自由變更 DataGridView 欄位數
namespace CheckBox2ShowColumn2
public partial class Grid : Form
public Grid()
InitializeComponent();
private void btnShow_Click(object sender, EventArgs e)
List<columnstate> csLists = new List<columnstate>();
foreach (DataGridViewColumn col in dgvColumns.Columns)
ColumnState cs = new ColumnState();
cs.ColName = col.Name;
cs.ColVisible = col.Visible;
csLists.Add(cs);
ColumnCheck frmshow = new ColumnCheck(csLists);
// 沒有按下 ColumnCheck Form 中的完成按鈕,就必須 return
if (frmshow.ShowDialog() != DialogResult.OK) return;
// 抓取 ColumnCheck 中的 Result 並根據它來顯示 DataGridView 欄位
foreach (ColumnState cs in frmshow.getResult())
dgvColumns.Columns[cs.ColName].Visible = cs.ColVisible;
ColumnCheck Form 內會動態利用 CheckBox 顯示 Grid Form 內 DataGridView 欄位名稱,讓使用者可以勾選要顯是哪些欄位
namespace CheckBox2ShowColumn2
public partial class ColumnCheck : Form
public ColumnCheck()
InitializeComponent();
#region Result 回傳值
private List<ColumnState> Result = new List<ColumnState>();
private void setResult()
foreach (CheckBox item in grpCheckBox.Controls)
ColumnState cs = new ColumnState();
cs.ColName = item.Name;
cs.ColVisible = item.Checked;
Result.Add(cs);
public List<ColumnState> getResult()
return Result;
#endregion
public ColumnCheck(List<ColumnState> _csLists)
InitializeComponent();
int ColumnAdd = 0;
int TopAdd = 0;
int LeftAdd = 0;
int index = 0;
foreach (ColumnState item in _csLists)
// 動態建立 CheckBox
CheckBox cb = new CheckBox();
cb.Visible = true;
cb.AutoSize = true;
cb.Text = item.ColName;
cb.Name = item.ColName;
cb.Checked = item.ColVisible;
// 每 5 個 Column 一欄,因此利用 % 來重覆計算
index = _csLists.IndexOf(item) % 5;
if(index == 0) ColumnAdd++;
TopAdd = index * 20;
LeftAdd = ColumnAdd * 100;
cb.Left = grpCheckBox.Left + LeftAdd;
cb.Top = grpCheckBox.Top + TopAdd;
grpCheckBox.Controls.Add(cb);
private void btnOK_Click(object sender, EventArgs e)
// 離開此 Form 前,必須把 grpCheckBox 內 CheckBox 值,丟回 Result
setResult();
// 關閉 Form
this.DialogResult = DialogResult.OK;
預設有 11 個欄位
[C#] 根據 CheckBox 來顯示 DataGridView 欄位 2
[C#] abstract 和 virtual 函數的差異
[C#] 根據 CheckBox 來顯示 DataGridView 欄位
[VS] 檔案名稱中的星號
[Word] 表格內的加總國字金額
[C#] 關閉全部的 Form
[C#] decimal 輸出兩位小數
[C#] ref 和 out 差異
[C#] 根據 Dictionary 的 value 來進行排序
[C#] 利用方向鍵移動 TextBox Focus
[VFP] 註冊 MSCOMCTL.OCX