需求:
设置自定义查询功能,使用户可以根据自行关注内容在界面显示相应信息。
设计思路:
1.首先将原本所有包含的列完整查询出来,并填充到DataGridView
2.将DataGridView各个列的visiable值转换成0/1(ture->1,false->0)后,再按序组合成一个配置字符串
3.使用CheckedListBox控件中的项对应配置字符串中的值(DataGridView的列)。
4.通过应用程序配置Settings.settings存取用户自定义设置的字符串值
功能实现:Demo
设计图如下:

图1 初始查询信息

图2 自定义显示列表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CustomSelectDemo.Properties;
namespace CustomSelectDemo
{
public partial class Test : Form
{
private string strCustomAwbInfo = "";
public Test()
{
InitializeComponent();
}
private void Test_Load(object sender, EventArgs e)
{
pnlCustom.Visible = false;
//初始化查询信息
//读取配置文件的值
if (Settings.Default.strCustomAwbInfo != "")
{
strCustomAwbInfo = Settings.Default.strCustomAwbInfo;
ShowCustomDataGridView(dgvAwbInfo,strCustomAwbInfo);
}
}
/// <summary>
/// 根据用户设置显示DataGridView内容
/// </summary>
/// <param name="customStr"></param>
/// <param name="dgv"></param>
private void ShowCustomDataGridView(DataGridView dgv,string strCustom)
{
for (int i = 0; i < strCustom.Length; i++)
{
switch (strCustom[i].ToString())
{
case "1":
dgv.Columns[i].Visible = true;
break;
case "0":
dgv.Columns[i].Visible = false;
break;
default:
dgv.Columns[i].Visible = true;
break;
}
}
}
/// <summary>
/// 查询
/// </summary>
private void btnSelect_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("AwbNo", typeof(String));
dt.Columns.Add("FlightNo", typeof(String));
dt.Columns.Add("FlightDate", typeof(String));
dt.Columns.Add("Piece", typeof(String));
dt.Columns.Add("Weight", typeof(String));
dt.Columns.Add("Remark", typeof(String));
dt.Rows.Add("784-12912900", "CZ129", "2009-12-9", "10", "100", "");
dt.Rows.Add("784-12912911", "CZ129", "2009-12-9", "11", "121", "");
dgvAwbInfo.AutoGenerateColumns = false;
dgvAwbInfo.DataSource = dt;
}
private void btnDgvCustom_Click(object sender, EventArgs e)
{
pnlCustom.Visible = true;
InitializeCheckedListBox(clbAwbInfo, strCustomAwbInfo);
}
/// <summary>
/// 根据用户设置初始化CheckedBoxList;第一次设置前全部选择
/// </summary>
private void InitializeCheckedListBox(CheckedListBox clb, string strCustom)
{
if (strCustom != "")
{
for (int i = 0; i < strCustom.Length; i++)
{
switch (strCustom[i].ToString())
{
case "1":
clb.SetItemChecked(i, true);
break;
case "0":
clb.SetItemChecked(i, false);
break;
default:
clb.SetItemChecked(i, true);
break;
}
}
}
else
{
for (int i = 0; i < clb.Items.Count; i++)
{
clb.SetItemChecked(i, true);
}
}
}
/// <summary>
/// 保存
/// </summary>
private void btnSave_Click(object sender, EventArgs e)
{
string str = "";
for (int i = 0; i < clbAwbInfo.Items.Count; i++)
{
if (clbAwbInfo.GetItemChecked(i))
{
str += "1";
}
else
{
str += "0";
}
}
strCustomAwbInfo=str;
//修改配置文件的值
Settings.Default.strCustomAwbInfo = strCustomAwbInfo;
Settings.Default.Save();
pnlCustom.Visible = false;
ShowCustomDataGridView(dgvAwbInfo, strCustomAwbInfo);
}
private void btnCancel_Click(object sender, EventArgs e)
{
pnlCustom.Visible = false;
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CustomSelectDemo.Properties;
namespace CustomSelectDemo
{
public partial class Test : Form
{
private string strCustomAwbInfo = "";
public Test()
{
InitializeComponent();
}
private void Test_Load(object sender, EventArgs e)
{
pnlCustom.Visible = false;
//初始化查询信息
//读取配置文件的值
if (Settings.Default.strCustomAwbInfo != "")
{
strCustomAwbInfo = Settings.Default.strCustomAwbInfo;
ShowCustomDataGridView(dgvAwbInfo,strCustomAwbInfo);
}
}
/// <summary>
/// 根据用户设置显示DataGridView内容
/// </summary>
/// <param name="customStr"></param>
/// <param name="dgv"></param>
private void ShowCustomDataGridView(DataGridView dgv,string strCustom)
{
for (int i = 0; i < strCustom.Length; i++)
{
switch (strCustom[i].ToString())
{
case "1":
dgv.Columns[i].Visible = true;
break;
case "0":
dgv.Columns[i].Visible = false;
break;
default:
dgv.Columns[i].Visible = true;
break;
}
}
}
/// <summary>
/// 查询
/// </summary>
private void btnSelect_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("AwbNo", typeof(String));
dt.Columns.Add("FlightNo", typeof(String));
dt.Columns.Add("FlightDate", typeof(String));
dt.Columns.Add("Piece", typeof(String));
dt.Columns.Add("Weight", typeof(String));
dt.Columns.Add("Remark", typeof(String));
dt.Rows.Add("784-12912900", "CZ129", "2009-12-9", "10", "100", "");
dt.Rows.Add("784-12912911", "CZ129", "2009-12-9", "11", "121", "");
dgvAwbInfo.AutoGenerateColumns = false;
dgvAwbInfo.DataSource = dt;
}
private void btnDgvCustom_Click(object sender, EventArgs e)
{
pnlCustom.Visible = true;
InitializeCheckedListBox(clbAwbInfo, strCustomAwbInfo);
}
/// <summary>
/// 根据用户设置初始化CheckedBoxList;第一次设置前全部选择
/// </summary>
private void InitializeCheckedListBox(CheckedListBox clb, string strCustom)
{
if (strCustom != "")
{
for (int i = 0; i < strCustom.Length; i++)
{
switch (strCustom[i].ToString())
{
case "1":
clb.SetItemChecked(i, true);
break;
case "0":
clb.SetItemChecked(i, false);
break;
default:
clb.SetItemChecked(i, true);
break;
}
}
}
else
{
for (int i = 0; i < clb.Items.Count; i++)
{
clb.SetItemChecked(i, true);
}
}
}
/// <summary>
/// 保存
/// </summary>
private void btnSave_Click(object sender, EventArgs e)
{
string str = "";
for (int i = 0; i < clbAwbInfo.Items.Count; i++)
{
if (clbAwbInfo.GetItemChecked(i))
{
str += "1";
}
else
{
str += "0";
}
}
strCustomAwbInfo=str;
//修改配置文件的值
Settings.Default.strCustomAwbInfo = strCustomAwbInfo;
Settings.Default.Save();
pnlCustom.Visible = false;
ShowCustomDataGridView(dgvAwbInfo, strCustomAwbInfo);
}
private void btnCancel_Click(object sender, EventArgs e)
{
pnlCustom.Visible = false;
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
PS:本人比较少写原作,语言描述能力尚未足,文章中文字描述很少,请见谅。 还好实现功能的代码相对简单,看懂应该问题不大吧..