C#-DataGridView由User自訂欄位顯示,並可以保存
延續上一個討論,
若使用者想自訂欄位是否顯示呢?
和「自訂欄位順序」一樣,
利用-屬性(Properties)來完成,
但是有所不同,
需要另開另一個視窗做所有欄位的顯示,
方便使用者選擇,
步驟如下:
1-需先建另一個「Form」-visiable.cs,將所有的欄位先顯示出來,再利用此visiable.cs去決定那些欄位要顯示
private void visiable_Load(object sender, EventArgs e)
{
_CKListBoxVsGrdView(_tempgrid, CkBox, "ini");
}
//控制checklistbox為勾選或取消狀態
public void _CKListBoxVsGrdView(InfoDataGridView _GrdV, CheckedListBox _CkBox, string _status)
{
ArrayList list = Properties.Settings.Default.DataGridViewShowDETAIL;
if (list != null)
{
_CkBox.CheckOnClick = true; //點一下就勾選 true
_CkBox.MultiColumn = true; //橫向多欄顯示 true
for (int i = 0; i < list.Count; i++)
{
bool _check = (bool)list[i];
_CkBox.Items.Add(_GrdV.Columns[_Gridcol[i].ToString()].HeaderText.ToString(), _check);
}
}
}
//程式關閉前記錄欄位順序,並重整
private void visiable_FormClosing(object sender, FormClosingEventArgs e)
{
ArrayList list = new ArrayList();
for (int i = 0; i < _tempgrid.Columns.Count; i++)
{
if (CkBox.GetItemChecked(i))
{
list.Add(true);
}
else
{
list.Add(false);
}
}
Properties.Settings.Default.DataGridViewShowDETAIL = list;
Properties.Settings.Default.Save();
GridColViewStateChange(_tempgrid);
}
//將掃瞄檔案變更欄位顯示狀態
public void GridColViewStateChange(InfoDataGridView _tempgrid)
{
ArrayList list = Properties.Settings.Default.DataGridViewShowDETAIL;
if (list != null)
{
for (int i = 0; i < list.Count; i++)
{
_tempgrid.Columns[i].Visible = (bool)list[i];
}
}
} 2-要先設定在Form所在的Project,選擇屬性(Properties),在左邊選擇設定(Settings),在右邊新建一個設定
3-「GridColViewStateChange」決定那些欄位顯示
//將掃瞄檔案變更欄位顯示狀態
public void GridColViewStateChange(InfoDataGridView _tempgrid)
{
ArrayList list = Properties.Settings.Default.DataGridViewShowDETAIL;
if (list != null)
{
for (int i = 0; i < list.Count; i++)
{
_tempgrid.Columns[i].Visible = (bool)list[i];
}
}
}
自我LV~