显示、隐藏DataGridView的列
来源:互联网 发布:鸡鸣狗吠 兄嫂当知之 编辑:程序博客网 时间:2024/06/11 18:27
最近闲来无事,就做了个自定义显示隐藏DataGridView列的控件。如下图,左边是隐藏字段,右边是显示的字段,可以上下排序、置顶置底,保存之后DataGridView会按照以选择的字段顺序调整列的先后顺序。双击字段可以移除到列一个列表中去,可以相互拖拽等功能,右键菜单有全选、取消等操作。就是上下排序的时候不能实现多选,希望各位大神看看能不能帮我解决一下这个问题,在此谢过了。好了,废话不多说了,代码贴上:
2011-09-05 升级说明:增加显示字段的保存。以选字段会保存下来,关闭后下次在打开DataGridView会按照您上次的排序及算则的字段进行排序
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections;using System.IO;namespace PrintStock{ public partial class ShowField : Form { private Hashtable _yestable; private Hashtable _notable; private PrintStockList _queryResult; public Hashtable YesTable { get { return _yestable; } set { _yestable = value; } } public Hashtable NoTable { get { return _notable; } set { _notable = value; } } public PrintStockList QQueryResult { get { return _queryResult; } set { _queryResult = value; } } public ShowField() { InitializeComponent(); } ContextMenuStrip contentMenu1; ContextMenuStrip contentMenu2; /// <summary> /// /// </summary> /// <param name="yestable"></param> /// <param name="notable"></param> /// <param name="queryResult"></param> public ShowField(Hashtable yestable, Hashtable notable, PrintStockList queryResult) { InitializeComponent(); _yestable = yestable; _notable = notable; _queryResult = queryResult; } private void ShowField_Load(object sender, EventArgs e) { //遍历hashtable 分别加载到两个listview IDictionaryEnumerator myEnumerator = YesTable.GetEnumerator(); while (myEnumerator.MoveNext()) { listView2.Items.Insert(0, new ListViewItem(myEnumerator.Value.ToString())); } IDictionaryEnumerator myEnumeratorNo = NoTable.GetEnumerator(); while (myEnumeratorNo.MoveNext()) { listView1.Items.Insert(0, new ListViewItem(myEnumeratorNo.Value.ToString())); } //添加悬浮提示 ToolTip tt = new ToolTip(); tt.InitialDelay = 200; tt.AutomaticDelay = 200; tt.ReshowDelay = 200; tt.ShowAlways = true; tt.SetToolTip(pictureBox_down, "下移选中字段(已选择字段列表)"); tt.SetToolTip(pictureBox_downdown, "置底选中字段(已选择字段列表)"); tt.SetToolTip(pictureBox_left, "左移选中字段"); tt.SetToolTip(pictureBox_right, "右移选中字段"); tt.SetToolTip(pictureBox_up, "上移选中字段(已选择字段列表)"); tt.SetToolTip(pictureBox_upup, "置顶选中字段(已选择字段列表)"); tt.SetToolTip(listView1, "双击从未选择字段列表中移除"); tt.SetToolTip(listView2, "双击从已选择字段列表中移除"); contentMenu1 = new ContextMenuStrip(); contentMenu1.Items.Add("全选"); contentMenu1.Items.Add("全不选"); contentMenu1.Items.Add("反选"); contentMenu1.Items[0].Click+=new EventHandler(contentMenu1_CheckAll); contentMenu1.Items[1].Click += new EventHandler(contentMenu1_CheckNo); contentMenu1.Items[2].Click+=new EventHandler(contentMenu1_Inverse); contentMenu2 = new ContextMenuStrip(); contentMenu2.Items.Add("全选"); contentMenu2.Items.Add("全不选"); contentMenu2.Items.Add("反选"); contentMenu2.Items[0].Click += new EventHandler(contentMenu2_CheckAll); contentMenu2.Items[1].Click += new EventHandler(contentMenu2_CheckNo); contentMenu2.Items[2].Click += new EventHandler(contentMenu2_Inverse); listView1.ContextMenuStrip = contentMenu1; listView2.ContextMenuStrip = contentMenu2; } private void contentMenu1_CheckAll(object sender, EventArgs e) { foreach (ListViewItem item in listView1.Items) item.Selected = true; } private void contentMenu1_CheckNo(object sender, EventArgs e) { foreach (ListViewItem item in listView1.Items) item.Selected = false; } private void contentMenu1_Inverse(object sender, EventArgs e) { foreach (ListViewItem item in listView1.Items) { if (item.Selected == true) item.Selected = false; else item.Selected = true; } } private void contentMenu2_CheckAll(object sender, EventArgs e) { foreach (ListViewItem item in listView2.Items) item.Selected = true; } private void contentMenu2_CheckNo(object sender, EventArgs e) { foreach (ListViewItem item in listView2.Items) item.Selected = false; } private void contentMenu2_Inverse(object sender, EventArgs e) { foreach (ListViewItem item in listView2.Items) { if (item.Selected == true) item.Selected = false; else item.Selected = true; } } private void listView1_DoubleClick(object sender, EventArgs e) { //获取listview1当前焦点 ListViewItem item = listView1.FocusedItem; listView1.Items.Remove(item); listView2.Items.Add(item); listView1.SelectedItems.Clear(); listView2.SelectedItems.Clear(); } private void listView2_DoubleClick(object sender, EventArgs e) { ListViewItem item = listView2.FocusedItem; listView2.Items.Remove(item); listView1.Items.Add(item); listView1.SelectedItems.Clear(); listView2.SelectedItems.Clear(); } private void pictureBox_left_Click(object sender, EventArgs e) { if (listView2.SelectedItems.Count > 0) { foreach (ListViewItem lvi in listView2.SelectedItems) { lvi.Remove(); listView1.Items.Add(lvi); listView1.SelectedItems.Clear(); listView2.SelectedItems.Clear(); } } } private void pictureBox_right_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { foreach (ListViewItem lvi in listView1.SelectedItems) { lvi.Remove(); listView2.Items.Add(lvi); listView1.SelectedItems.Clear(); listView2.SelectedItems.Clear(); } } } private void pictureBox_upup_Click(object sender, EventArgs e) { if (listView2.Items.Count > 0) { if (listView2.SelectedItems.Count > 1) { MessageBox.Show("此操作不支持多选!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ActiveControl = listView2; int selected = listView2.FocusedItem.Index; ListViewItem item = listView2.FocusedItem; if (selected != 0) { listView2.Items.Remove(item); listView2.Items.Insert(0, item); listView2.Items[selected].Selected = false; listView2.Items[selected].Focused = false; listView2.Items[0].Selected = true; listView2.Items[0].Focused = true; } } } private void pictureBox_up_Click(object sender, EventArgs e) { if (listView2.Items.Count > 0) { if (listView2.SelectedItems.Count > 1) { MessageBox.Show("此操作不支持多选!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ActiveControl = listView2; int selected = listView2.FocusedItem.Index; ListViewItem item = listView2.FocusedItem; if (selected != 0) { listView2.Items.Remove(item); listView2.Items.Insert(selected - 1, item); listView2.Items[selected].Focused = false; listView2.Items[selected].Selected = false; listView2.Items[selected - 1].Focused = true; listView2.Items[selected - 1].Selected = true; } } } private void pictureBox_down_Click(object sender, EventArgs e) { if (listView2.Items.Count > 0) { if (listView2.SelectedItems.Count > 1) { MessageBox.Show("此操作不支持多选!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ActiveControl = listView2; int selected = listView2.FocusedItem.Index; ListViewItem item = listView2.FocusedItem; if (selected != listView2.Items.Count - 1) { listView2.Items.Remove(item); listView2.Items.Insert(selected + 1, item); listView2.Items[selected].Selected = false; listView2.Items[selected].Focused = false; listView2.Items[selected + 1].Selected = true; listView2.Items[selected + 1].Focused = true; } } } private void pictureBox_downdown_Click(object sender, EventArgs e) { if (listView2.Items.Count > 0) { if (listView2.SelectedItems.Count > 1) { MessageBox.Show("此操作不支持多选!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ActiveControl = listView2; ListViewItem item = listView2.FocusedItem; int selected = this.listView2.FocusedItem.Index; if (selected != listView2.Items.Count - 1) { listView2.Items.Remove(item); listView2.Items.Add( item); listView2.Items[selected].Focused = false; listView2.Items[selected].Selected = false; listView2.Items[listView2.Items.Count - 1].Focused = true; listView2.Items[listView2.Items.Count - 1].Selected = true; } } } private void btnOK_Click(object sender, EventArgs e) { string shou = string.Empty; for (int m = 0; m < listView2.Items.Count; m++) { shou += listView2.Items[m].Text + ","; } if (shou == "") { MessageBox.Show("不能隐藏所有列!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } shou = shou.Substring(0,shou.Length-1); try { Write_Data_For_ShowField(QQueryResult.Name,shou); } catch { MessageBox.Show("出现错误!", "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Warning); } for (int j = 0; j < QQueryResult.dataGridView1.Columns.Count; j++) { for (int i = 0; i < listView1.Items.Count; i++) { if (listView1.Items[i].Text == QQueryResult.dataGridView1.Columns[j].HeaderText) QQueryResult.dataGridView1.Columns[j].Visible = false; } for (int k = 0; k < listView2.Items.Count; k++) { if (listView2.Items[k].Text == QQueryResult.dataGridView1.Columns[j].HeaderText) { QQueryResult.dataGridView1.Columns[j].Visible = true; QQueryResult.dataGridView1.Columns[QQueryResult.dataGridView1.Columns[j].HeaderText].DisplayIndex = listView2.Items[k].Index; } } } //for (int j = 0; j < QQueryResult.dataGridView1.Columns.Count; j++) //{ // for (int i = 0; i < listView2.Items.Count; i++) // { // if (listView1.Items[i].Text == QQueryResult.dataGridView1.Columns[j].HeaderText) // { // QQueryResult.dataGridView1.Columns[j].Visible = true; // } // } // this.Close(); } private void Write_Data_For_ShowField(string name,string content) { using (FileStream FS = File.Create(Application.StartupPath + "//"+name+".ini")) { FS.Close(); } using (StreamWriter write_string = File.CreateText(Application.StartupPath + "//" + name + ".ini")) { write_string.Write(Secret.Fun_Secret(content)); write_string.Close(); } } private void btn_cancel_Click(object sender, EventArgs e) { this.Close(); } private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { ListViewItem[] items = new ListViewItem[((ListView)(sender)).SelectedItems.Count]; int i = 0; foreach (ListViewItem item in ((ListView)(sender)).SelectedItems) { items[i] = item; i++; } ((ListView)(sender)).DoDragDrop(new DataObject("System.Windows.Forms.ListViewItem()", items), DragDropEffects.Copy); } private void listView2_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("System.Windows.Forms.ListViewItem()")) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void listView2_DragDrop(object sender, DragEventArgs e) { ListViewItem[] items = (ListViewItem[])(e.Data.GetData("System.Windows.Forms.ListViewItem()")); int i = 0; foreach (ListViewItem item in items) { ListViewItem listitem = new ListViewItem(items[i].Text, item.ImageIndex); listitem.SubItems.Add(items[i].SubItems[i].Text); ((ListView)(sender)).Items.Add(listitem); try { if (sender == listView2) listView1.Items.Remove(listView1.SelectedItems[i]); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } i++; } } private void listView2_ItemDrag(object sender, ItemDragEventArgs e) { ListViewItem[] items=new ListViewItem[((ListView)(sender)).SelectedItems.Count]; int i = 0; foreach (ListViewItem item in ((ListView)(sender)).SelectedItems) { items[i] = item; i++; } ((ListView)(sender)).DoDragDrop(new DataObject("System.Windows.Forms.ListViewItem()", items), DragDropEffects.Copy); } private void listView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("System.Windows.Forms.ListViewItem()")) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void listView1_DragDrop(object sender, DragEventArgs e) { ListViewItem[] items = (ListViewItem[])(e.Data.GetData("System.Windows.Forms.ListViewItem()")); int i = 0; foreach (ListViewItem item in items) { ListViewItem listitem = new ListViewItem(items[i].Text, item.ImageIndex); listitem.SubItems.Add(items[i].SubItems[i].Text); ((ListView)(sender)).Items.Add(listitem); try { if (sender == listView1) listView2.Items.Remove(listView2.SelectedItems[i]); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "产权交易所股权登记系统", MessageBoxButtons.OK, MessageBoxIcon.Error); } i++; } } }}
调用方法如下:
private void 显示字段ToolStripMenuItem_Click(object sender, EventArgs e) { if (dataGridView1.RowCount > 0) { Hashtable yestable = new Hashtable(); Hashtable notable = new Hashtable(); for (int i = 0; i < dataGridView1.Columns.Count; i++) { if (dataGridView1.Columns[i].Visible) { yestable.Add(dataGridView1.Columns[i].DisplayIndex, dataGridView1.Columns[i].HeaderText); } else { notable.Add(dataGridView1.Columns[i].DisplayIndex, dataGridView1.Columns[i].HeaderText); } } ShowField shouField = new ShowField(yestable, notable, this); shouField.ShowDialog(); } }
if (File.Exists(Application.StartupPath + "//" + this.Name + ".ini")) { string[] temp_data = new string[1000]; temp_data = File.ReadAllLines(Application.StartupPath + "//" + this.Name + ".ini", Encoding.UTF8); if (temp_data.Length > 0) { string[] shou = Secret.Fun_UnSecret(temp_data[0]).Split(','); for (int j = 0; j < dataGridView1.Columns.Count; j++) { dataGridView1.Columns[j].Visible = false; for (int i = 0; i < shou.Length; i++) { if (dataGridView1.Columns[j].HeaderText == shou[i].ToString()) { dataGridView1.Columns[j].Visible = true; dataGridView1.Columns[dataGridView1.Columns[j].HeaderText].DisplayIndex = i; } } } } } else { dataGridView1.Columns[10].Visible = false; dataGridView1.Columns[11].Visible = false; dataGridView1.Columns[12].Visible = false; dataGridView1.Columns[13].Visible = false; dataGridView1.Columns[14].Visible = false; dataGridView1.Columns[15].Visible = false; dataGridView1.Columns[16].Visible = false; dataGridView1.Columns[17].Visible = false; dataGridView1.Columns[18].Visible = false; dataGridView1.Columns[19].Visible = false; dataGridView1.Columns[20].Visible = false; dataGridView1.Columns[21].Visible = false; dataGridView1.Columns[22].Visible = false; dataGridView1.Columns[23].Visible = false; dataGridView1.Columns[24].Visible = false; dataGridView1.Columns[25].Visible = false; dataGridView1.Columns[26].Visible = false; dataGridView1.Columns[27].Visible = false; dataGridView1.Columns[28].Visible = false; dataGridView1.Columns[29].Visible = false; dataGridView1.Columns[30].Visible = false; dataGridView1.Columns[31].Visible = false; }
- 显示、隐藏DataGridView的列
- datagridview隐藏不需要显示的列
- DataGridView导出Excel 隐藏列不显示
- datagridview不显示空值&&只导出显示出的数据(去掉隐藏列)
- 隐藏DataGridView的表头及列
- 隐藏DataGridView中无数据的列
- DataGridView 行、列的隐藏和删除
- DataGridView 行、列的隐藏和删除
- DataGridView 行、列的隐藏和删除
- DataGridView 行、列的隐藏和删除
- DataGridview第一列隐藏
- 显示 /隐藏表的列
- Vb.Net程序设计:一个DataGridView的几个列要在隐藏和显示之间切换用到的3种代码
- datagridview 列显示设置
- 动态显示/隐藏 DataGrid 的列。
- 动态显示/隐藏 DataGrid 的列
- 显示和隐藏gridvew的列
- gridView显示隐藏列的值
- 关于C语言中逻辑运算和位运算的差别(记一笔)
- 您已经成为CSDN博客专家
- QT中的pro文件的编写
- nfdump软件使用总结
- 我的blog字典
- 显示、隐藏DataGridView的列
- asp编程琐碎
- (转载自王际逢博客)css命名及书写规范(整理稿)
- Android判断手机的当前网络
- Mongodb for PHP教程之管理工具
- 三国演义告诉我们的60条职场规则
- java实现音频文件的播放
- 去掉 3v免费空间底部广告
- 读取串口过来的GPS信息并分析其中内容