datagridview行上下移动功能实现
来源:互联网 发布:阿里云的销售好累啊 编辑:程序博客网 时间:2024/06/04 23:25
<pre name="code" class="csharp">public partial class SetColumnsDialog : Form { //判断用户是否有更改动作 private bool IsSaved = false; //存放内容数据Table private DataTable dt = new DataTable(); //XML文件路径 private string _xmlpath = string.Empty; public string XmlPath { set { _xmlpath = value; } } //不允许用户修改和移动的行 private List<string> _listrows = new List<string>(); public List<string> ListRows { set { _listrows = value; } } //设置某列是否只读 或者 可见 private List<TableAttribute> _listcolumns = new List<TableAttribute>(); public List<TableAttribute> ListColumns { set { _listcolumns = value; } } //判断用户是否更改了列名 private bool _isUpdColumns = false; public bool IsUpdColumns { get { return _isUpdColumns; } } //构造函数 public SetColumnsDialog() { InitializeComponent(); GlobalStaticData.SetBackColor(this); GlobalStaticData.SetButton(GlobalStaticData.GetChildControls<Button>(this)); GlobalStaticData.SetControlsfont(this.Controls); foreach (DataGridViewColumn dgvcc in dgvAttributeSetting.Columns) { dgvcc.SortMode = DataGridViewColumnSortMode.NotSortable; } } //构造函数-重载 public SetColumnsDialog(string sPath):this() { _xmlpath = sPath; } /// <summary> /// 加载事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SetColumnsDialog_Load(object sender, EventArgs e) { try { XmlDocument dom = new XmlDocument(); dom.Load(_xmlpath); XmlNodeList xnl = dom.ChildNodes[1].ChildNodes; DataRow dr = null; foreach (XmlNode xn in xnl[0]) { if (xn.Name == "Index") dt.Columns.Add(xn.Name, typeof(double)); else if (xn.Name == "Fixed") dt.Columns.Add(xn.Name, typeof(bool)); else dt.Columns.Add(xn.Name); } for (int i = 0; i < xnl.Count; i++) { dr = dt.NewRow(); foreach (XmlNode xn in xnl[i]) { dr[xn.Name] = xn.InnerText; } dt.Rows.Add(dr); } //取消自动生成列 this.dgvAttributeSetting.AutoGenerateColumns = false; this.dgvAttributeSetting.DataSource = dt; DataView dv = dt.DefaultView; dv.Sort = "Fixed DESC,Index ASC"; this.dgvAttributeSetting.CellValueChanged += dgvAttributeSetting_CellValueChanged; //设置哪些行不可编辑 foreach (DataGridViewRow dgv in dgvAttributeSetting.Rows) { foreach (string s in _listrows) { if (s.Equals(dgv.Cells["ColName"].Value.ToString().Trim())) { //着色 dgv.DefaultCellStyle.BackColor = Color.LightGray; //只读 dgv.ReadOnly = true; } } } //设置某列是否只读 或者 可见 foreach (TableAttribute ta in _listcolumns) { dgvAttributeSetting.Columns[ta.Name].Visible = ta.Visible; dgvAttributeSetting.Columns[ta.Name].ReadOnly = ta.Readonly; } } catch (Exception ex) { LoggerBiovision.LogException("", ex, "初始化发生异常,异常为:" + ex.ToString()); } } /// <summary> /// 上移 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btPre_Click(object sender, EventArgs e) { try { if (dgvAttributeSetting.SelectedRows.Count > 0) { string value = dgvAttributeSetting.SelectedRows[0].Cells[0].Value.ToString(); int index = dgvAttributeSetting.SelectedRows[0].Index; //判断当前行是否可以编辑和移动 foreach (string s in _listrows) { if (s.Equals(dgvAttributeSetting.Rows[index].Cells["ColName"].Value.ToString().Trim())) { CountdownMsgFrm.ShowMsg("提示","当前行不可以编辑和移动!"); return; } } if (index <= 0) { CountdownMsgFrm.ShowMsg("提示", "已经是第一项"); return; } else if (dt.Rows[index]["Fixed"] != null && dt.Rows[index]["Fixed"].ToString() == "False" && dt.Rows[index - 1]["Fixed"].ToString() == "True") { CountdownMsgFrm.ShowMsg("提示", "非固定项不能在固定项前面"); return; } //如果上行为不可编辑、不可移动 foreach (string s in _listrows) { if (s.Equals(dgvAttributeSetting.Rows[index - 1].Cells["ColName"].Value.ToString().Trim())) { CountdownMsgFrm.ShowMsg("提示", "上一行不可以编辑和移动,不能再移了!"); return; } } DataRow dr = dt.NewRow(); foreach (DataColumn dc in dt.Columns) { if (dc.ColumnName == "Index") { dr["Index"] = int.Parse(dt.Rows[index - 1]["Index"].ToString()); dt.Rows[index - 1]["Index"] = dt.Rows[index]["Index"]; } else dr[dc.ColumnName] = dt.Rows[index][dc.ColumnName]; } dt.Rows.RemoveAt(index); dt.Rows.InsertAt(dr, index - 1); this.dgvAttributeSetting.CurrentCell = this.dgvAttributeSetting.Rows[index - 1].Cells[0]; IsSaved = true; } } catch (Exception ex) { LoggerBiovision.LogException("", ex, "上移发生异常,异常为:" + ex.ToString()); } } /// <summary> /// 下移 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btNex_Click(object sender, EventArgs e) { try { int index = dgvAttributeSetting.SelectedRows[0].Index; //判断当前行是否可以编辑和移动 foreach (string s in _listrows) { if (s.Equals(dgvAttributeSetting.Rows[index].Cells["ColName"].Value.ToString().Trim())) { CountdownMsgFrm.ShowMsg("提示", "当前行不可以编辑和移动!"); return; } } if (index == dt.Rows.Count - 1) { CountdownMsgFrm.ShowMsg("提示", "已经是最后一项!"); return; } else if (dt.Rows[index]["Fixed"] != null && dt.Rows[index]["Fixed"].ToString() == "True" && dt.Rows[index + 1]["Fixed"].ToString() == "False") { CountdownMsgFrm.ShowMsg("提示", "固定项不能在非固定项后面"); return; } //如果上行为不可编辑、不可移动 foreach (string s in _listrows) { if (s.Equals(dgvAttributeSetting.Rows[index + 1].Cells["ColName"].Value.ToString().Trim())) { CountdownMsgFrm.ShowMsg("提示", "下一行不可以编辑和移动,不能再移了!"); return; } } DataRow dr = dt.NewRow(); foreach (DataColumn dc in dt.Columns) { if (dc.ColumnName == "Index") { dr["Index"] = int.Parse(dt.Rows[index + 1]["Index"].ToString()); dt.Rows[index + 1]["Index"] = dt.Rows[index]["Index"]; } else dr[dc.ColumnName] = dt.Rows[index][dc.ColumnName]; } dt.Rows.RemoveAt(index); dt.Rows.InsertAt(dr, index + 1); this.dgvAttributeSetting.CurrentCell = this.dgvAttributeSetting.Rows[index + 1].Cells[0]; IsSaved = true; } catch (Exception ex) { LoggerBiovision.LogException("", ex, "下移发生异常,异常为:" + ex.ToString()); } } /// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btSave_Click(object sender, EventArgs e) { try { XmlDocument doc = new XmlDocument(); File.CreateText(_xmlpath).Dispose(); XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); doc.AppendChild(dec); //创建一个根节点(一级) XmlElement root = doc.CreateElement("List"); doc.AppendChild(root); int i = 1; //创建节点(二级) foreach (DataGridViewRow Row in dgvAttributeSetting.Rows) { XmlNode node = doc.CreateElement(Row.Cells["ColName"].Value.ToString()); XmlElement element1 = doc.CreateElement("Name"); element1.InnerText = Row.Cells["ColName"].Value.ToString(); node.AppendChild(element1); XmlElement element2 = doc.CreateElement("Text"); element2.InnerText = Row.Cells["ColText"].Value.ToString(); node.AppendChild(element2); XmlElement element3 = doc.CreateElement("Visible"); element3.InnerText = Row.Cells["ColVisible"].EditedFormattedValue.ToString(); node.AppendChild(element3); XmlElement element4 = doc.CreateElement("Fixed"); element4.InnerText = Row.Cells["ColFixed"].EditedFormattedValue.ToString(); node.AppendChild(element4); XmlElement element5 = doc.CreateElement("Width"); element5.InnerText = Row.Cells["ColWidth"].EditedFormattedValue.ToString(); node.AppendChild(element5); XmlElement element6 = doc.CreateElement("Index"); element6.InnerText = i.ToString(); node.AppendChild(element6); root.AppendChild(node); i++; } doc.Save(_xmlpath); IsSaved = false; DialogResult = DialogResult.OK; this.Close(); } catch (Exception ex) { LoggerBiovision.LogException("", ex, "保存发生异常,异常为:" + ex.ToString()); CountdownMsgFrm.ShowMsg("错误", "保存失败"); DialogResult = DialogResult.Cancel; } } //判断用户是否有改变 private void dgvAttributeSetting_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex > -1) { IsSaved = true; if (e.ColumnIndex == dgvAttributeSetting.Columns["ColText"].Index) { _isUpdColumns = true; } } } catch (Exception ex) { LoggerBiovision.LogException("", ex, "修改发生异常,异常为:" + ex.ToString()); } } //窗体关闭事件 private void SetColumnsDialog_FormClosing(object sender, FormClosingEventArgs e) { try { if (IsSaved == true) { MyAskMessageBox res = new MyAskMessageBox("Single", "当前有改动,要保存吗?", "询问", "是", "否", MessageBoxIcon.Question); res.StartPosition = FormStartPosition.CenterParent; res.ShowDialog(this); if (res.DialogResult == DialogResult.Yes) btSave_Click(null, null); } } catch (Exception ex) { LoggerBiovision.LogException("", ex, "关闭发生异常,异常为:" + ex.ToString()); } } //取消 private void btCancel_Click(object sender, EventArgs e) { try { IsSaved = false; DialogResult = DialogResult.Cancel; this.Close(); } catch (Exception ex) { LoggerBiovision.LogException("", ex, "取消发生异常,异常为:" + ex.ToString()); } } } //表格属性类 public class TableAttribute { //列名 private string _name; public string Name { get { return _name; } set { _name = value; } } //是否只读 private bool _readonly; public bool Readonly { get { return _readonly; } set { _readonly = value; } } //是否可见 private bool _visible; public bool Visible { get { return _visible; } set { _visible = value; } } }
0 0
- datagridview行上下移动功能实现
- DataGridView 实现行[Row]的上下移动
- datagridview行上下移动
- DataGridView行的上下移动
- DataGridView 行记录上下移动
- DataGridView 行记录上下移动
- C# DataGridView 上下移动行
- C# Winform DataGridView实现行[Row]的上下移动........
- C# Winform DataGridView实现行[Row]的上下移动
- 实现DataGridView中行的上下移动
- C# dataGridView上下移动选中行
- 实现DataGridView中行的上下移动(C#实现)
- sqlserver实现对TreeView节点上下移动的排序功能
- ListBox实现上下移动
- EasyUI实现上下移动
- 上下移动~上下拖动实现思路流程
- datagridview粘贴功能实现
- 表格行上下移动
- 【ASP.NET】定时执行任务
- Azure与Windows Server 8的匹配开发
- Spring事务隔离级别及设置
- linux命令行下操作mysql的命令汇总
- CC2540 与 CC2541 区别 1
- datagridview行上下移动功能实现
- 设计模式学习笔记-观察者模式(Observer)
- iOS学习笔记:网络编程总结
- 常用网站(程序员必备)
- 微信JS之config:invalid url domain
- OK335xs2按键驱动程序
- js构建Map
- 如何解决秒杀的性能问题和超卖的讨论
- C++重定义解决方法总结