最终显示效果,如下图所示:
datagridview开始显示通过调用XML存储的字段值及顺序来显示,右键调出Tools来控制显示的顺序及是否显示,通过加号和减号进行调整顺序。
XML存储字段值及顺序
主要代码及事件:
获取datagridview当前显示的字段值及顺序,并存储到数组中,用于listview显示原始的全部的字段值,以及当前显示的顺序;
private string[] _GetColunmName()
{
string[] value=new string[dataGridView1.ColumnCount];
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
int x = dataGridView1.Columns[i].DisplayIndex;
value[x]= dataGridView1.Columns[i].HeaderText;
}
return value;
}
从XML中获取需要显示的字段值的信息,并进行显示及显示顺序的设置;
private void SetColumn(string GridName) //GridName为指定节点的名称;
{
string d = GetXmlColumnName(GridName); //调用事件获取指定节点的内容
string[] dstr = d.Split(',');
dataGridView1.SuspendLayout();
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
dataGridView1.Columns[i].Visible = dstr.Contains(dataGridView1.Columns[i].HeaderText);
string _header = dataGridView1.Columns[i].HeaderText;
for (int j = 0; j < dstr.Length; j++)
{
string s = dstr[j];
if (s == _header)
{
dataGridView1.Columns[i].DisplayIndex = j;
}
}
}
dataGridView1.ResumeLayout(true);
}
tools页面与主页面通过委托与事件的方式进行调用;
tools的主要代码
Tools的onload的事件代码
private void Tools_Load(object sender, EventArgs e)
{
string[] str = _columnname;//获取调用模块的列明;
string d = GetXmlColumnName(_mainname); //获取xml中存储的值;
string[] dstr = d.Split(',');//xml中的列
//显示全部的GridView名称
foreach (var _str in str)
{
listView1.Items.Add(_str.ToString());
}
//将XML中存在的字段名进行打钩选中
for (int i = 0; i < listView1.Items.Count; i++)
{
foreach (var _str in dstr)
{
if (listView1.Items[i].Text == _str.ToString())
{
listView1.Items[i].Checked = true;
}
}
}
}
//保存到XML的代码;_mainname为节点的名称,value为获取的字段名称的顺序;
private void SaveXmlColumn()
{
string value = "";
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked==true)
{
value += listView1.Items[i].Text + ",";
}
}
if (value.Length > 0)
{
value = value.Remove(value.Length - 1, 1);
}
SaveXmlHeader(_mainname, value); //调用保存到XML中;
SetXmlColumn(); //调用事件进行显示页面的调整
}