datagridviewrow 行宽_WinForm中实现DataGridView自动保存列的宽度和位置 | 学步园

本文介绍如何在Windows Forms应用中实现DataGridView控件的列宽和位置自动保存与加载。通过读写XML文件,保存用户自定义的列顺序、宽度和可见性,并在加载时恢复这些设置。此外,还提供了列宽和显示顺序改变时自动保存的事件处理方法。
摘要由CSDN通过智能技术生成

本文参考:操作DataGridView 以xml形式保存,拖动需要列的顺序保存,加载,删除文件;

View Code

Load 事件调用加载文件 (subInitDgv();)

//初始化列表        private void subInitDgv()

{

LoginInfo.BindReadDataGridViewStyle(this.Name, dgvSubbill);

}

详见下面代码:

//加载XMLDataGridView 样式        public static void BindReadDataGridViewStyle(string strFromName, DataGridView dgvMain)

{

try

{

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFromName + "_" + dgvMain.Name + ".xml";

if (!File.Exists(FileName))

{

return;

}

DataTable DTname = new DataTable();

DTname.TableName = dgvMain.Name;

DTname.Columns.Add("ColName");  //列名                DTname.Columns.Add("ColHeaderText");  //标题                DTname.Columns.Add("ColWidth");  //宽度                DTname.Columns.Add("ColVisble");  //是否显示                DTname.Columns.Add("ColId");  //显示顺序//DTname.Columns.Add("DefaultCellStyle");//单元格样式//DTname.Columns.Add("ColumnType");//单元格类型                DTname.ReadXml(FileName);

foreach (DataRow row in DTname.Rows)

{

dgvMain.Columns[row["ColName"].ToString().Trim()].HeaderText = row["ColHeaderText"].ToString().Trim();

dgvMain.Columns[row["ColName"].ToString().Trim()].Width = int.Parse(row["ColWidth"].ToString().Trim());

dgvMain.Columns[row["ColName"].ToString().Trim()].Visible = Boolean.Parse(row["ColVisble"].ToString().Trim());

dgvMain.Columns[row["ColName"].ToString().Trim()].DisplayIndex = int.Parse(row["ColId"].ToString().Trim());

//dgvMain.Columns[row["name"].ToString()].DefaultCellStyle.Alignment = (DataGridViewContentAlignment)row["DefaultCellStyle"];//dgvMain.Columns[row["ColumnType"].ToString()].DataPropertyName = row["ColumnType"].ToString();                }

}

catch (Exception ex)

{

throw ex;

}

}

//保存用户自定义列表顺序//窗体名称///DataGridView名称        public static void SaveDataGridViewStyle(string strFormName, DataGridView DgvMain)

{

try

{

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFormName + "_" + DgvMain.Name + ".xml";  //生成文件到指定目录                DataTable DTname = new DataTable();

DTname.TableName = DgvMain.Name;

DTname.Columns.Add("ColName");  //列名                DTname.Columns.Add("ColHeaderText");  //标题                DTname.Columns.Add("ColWidth");  //宽度                DTname.Columns.Add("ColVisble");  //是否显示                DTname.Columns.Add("ColId");  //显示顺序//DTname.Columns.Add("DefaultCellStyle");//单元格样式//DTname.Columns.Add("ColumnType");//单元格类型

string[] array = new string[DgvMain.Columns.Count];

//获取Visble =true 的列                foreach (DataGridViewColumn column in DgvMain.Columns)

{

if (column.Visible == true)

{

//拖动列顺序                        array[column.DisplayIndex] = column.Name + '|' + column.HeaderText + '|' + column.Width + '|' + column.Visible + '|' + column.DisplayIndex;

}

}

int ColumnsCount = array.Length;

//取列属性                for (int i = 0; i 

{

string[] str = new string[5];

try

{

DataRow row = DTname.NewRow();

str = array.GetValue(i).ToString().Split('|'); //分隔                        row["ColName"] = str[0];

row["ColHeaderText"] = str[1];

row["ColWidth"] = str[2];

row["ColVisble"] = str[3];

row["ColId"] = str[4];

DTname.Rows.Add(row);

DTname.AcceptChanges();

}

catch

{

continue;

}

}

DTname.WriteXml(FileName);

}

catch (Exception ex)

{

throw ex;

}

}

//删除指定的XML文件        public static bool deleteDataGridViewStyle(string strFromName, DataGridView dgvMain)

{

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFromName + "_" + dgvMain.Name + ".xml";

if (File.Exists(FileName))

{

File.Delete(FileName); return true;

}

else

{

return false;

}

}

本人对上面的的写法进行优化,注册列宽度改变事件和列的索引位置发生改变事件,自动实现保存。

//列的宽度改变时候触发自动保存事件。

dgvMain.ColumnWidthChanged += new DataGridViewColumnEventHandler(dgvMain_ColumnWidthChanged);

//列的显示位置改变时候触发自动保存事件。

dgvMain.ColumnDisplayIndexChanged += new DataGridViewColumnEventHandler(dgvMain_ColumnDisplayIndexChanged);

View Code

//在窗体Load时间中加载BindReadDataGridViewStyle方法即可。自动保存DataGridView列的宽度及位置变化。///   public class DgvStyle

{

//加载XMLDataGridView 样式        public static void BindReadDataGridViewStyle(DataGridView dgvMain)

{

string strFromName = dgvMain.FindForm().Name;

try

{

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFromName + "_" + dgvMain.Name + ".xml";

//如果不存在配置文件,则保存。                if (!File.Exists(FileName))

{

SaveDataGridViewStyle(dgvMain);

//return;                }

DataTable DTname = new DataTable();

DTname.TableName = dgvMain.Name;

DTname.Columns.Add("ColName");  //列名                DTname.Columns.Add("ColHeaderText");  //标题                DTname.Columns.Add("ColWidth");  //宽度                DTname.Columns.Add("ColVisble");  //是否显示                DTname.Columns.Add("ColId");  //显示顺序//DTname.Columns.Add("DefaultCellStyle");//单元格样式//DTname.Columns.Add("ColumnType");//单元格类型                DTname.ReadXml(FileName);

foreach (DataRow row in DTname.Rows)

{

dgvMain.Columns[row["ColName"].ToString().Trim()].HeaderText = row["ColHeaderText"].ToString().Trim();

dgvMain.Columns[row["ColName"].ToString().Trim()].Width = int.Parse(row["ColWidth"].ToString().Trim());

dgvMain.Columns[row["ColName"].ToString().Trim()].Visible = Boolean.Parse(row["ColVisble"].ToString().Trim());

dgvMain.Columns[row["ColName"].ToString().Trim()].DisplayIndex = int.Parse(row["ColId"].ToString().Trim());

//dgvMain.Columns[row["name"].ToString()].DefaultCellStyle.Alignment = (DataGridViewContentAlignment)row["DefaultCellStyle"];//dgvMain.Columns[row["ColumnType"].ToString()].DataPropertyName = row["ColumnType"].ToString();                }

//允许用户手动排序列。                dgvMain.AllowUserToOrderColumns = true;

//列的宽度改变时候触发自动保存事件。                dgvMain.ColumnWidthChanged += new DataGridViewColumnEventHandler(dgvMain_ColumnWidthChanged);

//列的显示位置改变时候触发自动保存事件。                dgvMain.ColumnDisplayIndexChanged += new DataGridViewColumnEventHandler(dgvMain_ColumnDisplayIndexChanged);

}

catch (Exception ex)

{

throw ex;

}

}

///        static void dgvMain_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e)

{

SaveDataGridViewStyle(e.Column.DataGridView);

}

///        static void dgvMain_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)

{

SaveDataGridViewStyle(e.Column.DataGridView);

}

//保存用户自定义列表顺序//DataGridView名称        private static void SaveDataGridViewStyle(DataGridView DgvMain)

{

try

{

string strFormName = DgvMain.FindForm().Name;

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFormName + "_" + DgvMain.Name + ".xml";  //生成文件到指定目录                DataTable DTname = new DataTable();

DTname.TableName = DgvMain.Name;

DTname.Columns.Add("ColName");  //列名                DTname.Columns.Add("ColHeaderText");  //标题                DTname.Columns.Add("ColWidth");  //宽度                DTname.Columns.Add("ColVisble");  //是否显示                DTname.Columns.Add("ColId");  //显示顺序//DTname.Columns.Add("DefaultCellStyle");//单元格样式//DTname.Columns.Add("ColumnType");//单元格类型

string[] array = new string[DgvMain.Columns.Count];

//获取Visble =true 的列                foreach (DataGridViewColumn column in DgvMain.Columns)

{

if (column.Visible == true)

{

//拖动列顺序                        array[column.DisplayIndex] = column.Name + '|' + column.HeaderText + '|' + column.Width + '|' + column.Visible + '|' + column.DisplayIndex;

}

}

int ColumnsCount = array.Length;

//取列属性                for (int i = 0; i 

{

string[] str = new string[5];

try

{

DataRow row = DTname.NewRow();

str = array.GetValue(i).ToString().Split('|'); //分隔                        row["ColName"] = str[0];

row["ColHeaderText"] = str[1];

row["ColWidth"] = str[2];

row["ColVisble"] = str[3];

row["ColId"] = str[4];

DTname.Rows.Add(row);

DTname.AcceptChanges();

}

catch

{

continue;

}

}

DTname.WriteXml(FileName);

}

catch (Exception ex)

{

throw ex;

}

}

//删除指定的XML文件/        public static bool DeleteDataGridViewStyle(DataGridView dgvMain)

{

string strFormName = dgvMain.FindForm().Name;

string XMLPath;

XMLPath = Application.StartupPath + @"\\config" + "\\";

string FileName = XMLPath + strFormName + "_" + dgvMain.Name + ".xml";

if (File.Exists(FileName))

{

File.Delete(FileName); return true;

}

else

{

return false;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值