• Telerik 控件事例(鼠标拖动行,拖动列,设置行对齐,行宽,是否显示)


    People.cs

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;

    namespace RadGridViewControl
    {
      public class People
      {
        public Guid Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string Sex { get; set; }

        public string Tel { get; set; }

        public string Address { get; set; }

        public DateTime BirthDay { get; set; }

        public string Note { get; set; }

        public string Like { get; set; }

        public string Work { get; set; }


        public List<People> Init()
        {
          var list = new List<People>();
          for (int i = 0; i < 20; i++)
          {
            var people = new People
            {
              Id = Guid.NewGuid(),
              FirstName = "王",
              LastName = "友",
              Sex = "男",
              Tel = "15209893158",
              Address = "安徽省合肥市高新区",
              BirthDay = DateTime.Now,
              Note = "大家好我是王友",
              Like = "我喜欢编程",
              Work = "其实我是一名程序员"
            };
            list.Add(people);

          }
        return list;
      }


      public DataTable Data()
      {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id");
        dt.Columns.Add("FirstName");
        dt.Columns.Add("LastName");
        dt.Columns.Add("Sex");
        dt.Columns.Add("Tel");
        dt.Columns.Add("Address");
        dt.Columns.Add("BirthDay");
        dt.Columns.Add("Note");
        dt.Columns.Add("Like");
        dt.Columns.Add("Work");
        for (int i = 0; i < 20; i++)
        {
          DataRow dr = dt.NewRow();
          dr["Id"] = i;
          dr["FirstName"] = "王";
          dr["LastName"] = "友"+i;
          dr["Sex"] = "男";
          dr["Tel"] = "1520989315"+i;
          dr["Address"] = "安徽省合肥市高新区";
          dr["BirthDay"] = DateTime.Now.AddDays(i);
          dr["Note"] = "大家好我是王友"+i;
          dr["Like"] = "我喜欢编程";
          dr["Work"] = "其实我是一名程序员";
          dt.Rows.Add(dr);
        }
        return dt;
        }
      }
    }

    RadGridViewUserControl.cs

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Windows.Forms;
    using Telerik.WinControls;
    using Telerik.WinControls.Data;
    using Telerik.WinControls.UI;
    using Telerik.WinControls.UI.Localization;
    using System.Xml;

    namespace RadGridViewControl
    {
      public partial class RadGridViewUserControl : UserControl
      {
        /// <summary>
        /// 数据源
        /// </summary>
        public DataTable Data;

        private DataTable DataTableList { get; set; }

        /// <summary>
        /// 构造函数
        /// </summary>
        public RadGridViewUserControl()
        {
          InitializeComponent();
        }

        /// <summary>
        /// 构造函数2
        /// </summary>
        /// <param name="xmlName">xml文件路径+名称</param>
        public RadGridViewUserControl(string xmlName)
        {
          InitializeComponent();
          _xmlName = xmlName;
        }

        #region 定义的接口

        /// <summary>
        /// 定义xml文件
        /// </summary>
        public string Xml { get; set; }

        /// <summary>
        /// xml文件路径+名称
        /// </summary>
        public List<SelectColumn> ReadXml()
        {
          List<SelectColumn> selectColumns = new List<SelectColumn>();
          XmlDataDocument doc = new XmlDataDocument();
          try
          {
            doc.Load(Xml);

            XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
            XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
            if (null == dataCellsNode) return null;
            XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

            foreach (XmlNode node in dataCellNode)
            {
              SelectColumn selectColumn = new SelectColumn();
              selectColumn.ColumnName = node.SelectSingleNode("cell_name").InnerText;
              selectColumn.ChineseColumnName = node.SelectSingleNode("chinese_name").InnerText;
              selectColumn.IsVisible = bool.Parse(node.SelectSingleNode("visible").InnerText);
              selectColumn.Width = int.Parse(node.SelectSingleNode("width").InnerText);
              selectColumn.Align = int.Parse(node.SelectSingleNode("align").InnerText);
              selectColumn.ShowIndex = int.Parse(node.SelectSingleNode("show_index").InnerText);
              selectColumns.Add(selectColumn);
            }
          }
        catch (Exception ex)
        {

        }
        return selectColumns;
      }

      /// <summary>
      /// 获取选中的数据
      /// </summary>
      /// <param name="indexList">获取选中的行</param>
      /// <returns></returns>
      public List<GridViewRowInfo> GetSelData(ref List<string> indexList)
      {
        var listRows = new List<GridViewRowInfo>();
        foreach (var row in rgv_Control.Rows)
        {
          var value = row.Cells["ChkSelect"].Value.ToString();
          var index = row.Cells["Num"].Value.ToString();
          if (!value.Equals("True")) continue;
          indexList.Add(index);
          listRows.Add(row);
        }
        return listRows;
      }

      /// <summary>
      /// 初始化用户控件
      /// </summary>
      public void RadGridViewControl_Init(DataTable dataTable)
      {
        DataTableList = dataTable;
        SetRadGridViewProperty();
        AddTwoColumn();
        BindRadGridViewControl(dataTable);
        WrapText();
        SetColumnReadOnly();

        RadGridLocalizationProvider.CurrentProvider = new ChineseRadGridLocalizationProvider();
        rgv_Control.Rows.CollectionChanged += Rows_CollectionChanged;
        SetRadGridViewForXml();
      }

      /// <summary>
      /// 通过XML设置RadGridView控件
      /// </summary>
      private void SetRadGridViewForXml()
      {
        var list = ReadXml();
        SetColumnWidth(list);
        ConvertColumnNameToChinese(list);
        ShowColumnName(list);
        SetColumnAlign(list);
        ShowColumnIndex(list);
      }

      /// <summary>
      /// 获取拖动后的数据记录
      /// </summary>
      /// <returns></returns>
      public DataTable GetAllGridViewData()
      {
        var dt = new DataTable();
        foreach (var column in rgv_Control.Columns)
        {
          var dataColumn = new DataColumn
          {
            ColumnName = column.Name
          };
          if (!(column.Name.Equals("Num") || column.Name.Equals("ChkSelect")))
          {
            dt.Columns.Add(dataColumn);
          }
        }
        foreach (GridViewRowInfo t in rgv_Control.Rows)
        {
          var datarow = dt.NewRow();
          for (var j = 0; j < dt.Columns.Count; j++)
          {
            datarow[dt.Columns[j].ColumnName] = t.Cells[dt.Columns[j].ColumnName].Value;
          }
          dt.Rows.Add(datarow);
        }
        return dt;
        }

      /// <summary>
      /// 获取按钮的句柄
      /// </summary>
      /// <returns></returns>
      public IntPtr getBtHandler()
      {
        return this.btn_Select.Handle;
      }
      #endregion

      /// <summary>
      /// 如果像这样写分组的话那我要累死
      /// </summary>
      public bool EnableGrouping
      {
        get { return rgv_Control.EnableGrouping; }
        set { rgv_Control.EnableGrouping = value; }
      }

      /// <summary>
      /// 设置RadGridView控件属性
      /// </summary>
      private void SetRadGridViewProperty()
      {
        rgv_Control.EnableGrouping = false;//去掉分组
        rgv_Control.AllowDrop = true;
        rgv_Control.AllowRowReorder = true;
        rgv_Control.AddNewRowPosition = SystemRowPosition.Bottom;
        rgv_Control.ShowRowHeaderColumn = false;
        rgv_Control.AutoSizeRows = true;
        rgv_Control.AllowAddNewRow = false;
      }

      /// <summary>
      /// 添加两个特殊列
      /// </summary>
      private void AddTwoColumn()
      {
        var numColumn = new GridViewDecimalColumn(typeof(int), "Num", "Num")
        {
          HeaderText = "序 号",
          Width = 50,
          ReadOnly = true,
          IsPinned = true
        };
        rgv_Control.Columns.Add(numColumn);

        var chkColumn = new GridViewCheckBoxColumn("ChkSelect", "ChkSelect")
        {
          HeaderText = "选 择",
          Width = 50,
          IsPinned = true
        };
        rgv_Control.Columns.Add(chkColumn);
      }

      /// <summary>
      /// 设置表格只读
      /// </summary>
      private void SetColumnReadOnly()
      {
        for (var i = 0; i < rgv_Control.Columns.Count; i++)
        {
          rgv_Control.Columns[i].ReadOnly = true;
        }
        rgv_Control.Columns["ChkSelect"].ReadOnly = false;
      }

      /// <summary>
      /// 显示列顺序
      /// </summary>
      /// <param name="list"></param>
      private void ShowColumnIndex(IEnumerable<SelectColumn> list)
      {
        foreach (var i in list)
        {
          SelectColumn selectColumn = i;
          foreach (var column in rgv_Control.Columns.Where(column => !column.Name.Equals("Num") && !column.Name.Equals("ChkSelect")).Where(column => selectColumn.ColumnName.Equals(column.Name)))
          {
            var oldIndex = column.Index;
            var newIndex = i.ShowIndex;
            if (oldIndex > newIndex)
            {
              rgv_Control.Columns.Move(oldIndex, newIndex);
              rgv_Control.Columns.Move(newIndex + 1, oldIndex);
            }
            else if (oldIndex < newIndex)
            {
              rgv_Control.Columns.Move(oldIndex, newIndex);
              rgv_Control.Columns.Move(newIndex - 1, oldIndex);
            }
            break;
          }
        }
      }

      /// <summary>
      /// 设置列宽度
      /// </summary>
      private void SetColumnWidth(IEnumerable<SelectColumn> list)
      {
        foreach (var i in list)
        {
          rgv_Control.Columns[i.ColumnName].Width = i.Width;
        }
      }

      /// <summary>
      /// 将列名转化成中文
      /// </summary>
      public void ConvertColumnNameToChinese(List<SelectColumn> list)
      {
        foreach (var i in list)
        {
          rgv_Control.Columns[i.ColumnName].HeaderText = i.ChineseColumnName;
        }
      }

      /// <summary>
      /// Data中,是否显示列名称
      /// </summary>
      public void ShowColumnName(List<SelectColumn> list)
      {
        foreach (var i in list)
        {
          rgv_Control.Columns[i.ColumnName].IsVisible = i.IsVisible;
        }
      }

      /// <summary>
      /// 设置列对齐
      /// </summary>
      public void SetColumnAlign(List<SelectColumn> list)
      {
        foreach (var i in list)
        {
          switch (i.Align)
          {
            case 0:
            rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleCenter;
            break;
            case 1:
            rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleLeft;
            break;
            case 3:
            rgv_Control.Columns[i.ColumnName].TextAlignment = ContentAlignment.MiddleRight;
            break;
            default:
            break;
          }
        }
      }

      /// <summary>
      /// 点击列选择按钮
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btn_Select_Click(object sender, EventArgs e)
      {
        var selectColumnForm = new SelectColumnForm(Xml);
        selectColumnForm.ShowDialog();
        if (selectColumnForm.DialogResult == DialogResult.OK)
        {
          SetRadGridViewForXml();
        }
      }

      /// <summary>
      /// 设置右键菜单
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void rgv_Control_ContextMenuOpening(object sender, Telerik.WinControls.UI.ContextMenuOpeningEventArgs e)
      {
        for (var i = 0; i < e.ContextMenu.Items.Count; i++)
        {
          var contextMenuText = e.ContextMenu.Items[i].Text;

          switch (contextMenuText)
          {
            case "条件格式":
            e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
            e.ContextMenu.Items[i + 1].Visibility = ElementVisibility.Collapsed;
            break;
            case "隐 藏":
            e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
            break;
            case "锁定状态":
            e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
            break;
            case "自适应列宽":
            e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
            break;
            case "列选择":
            e.ContextMenu.Items[i].Visibility = ElementVisibility.Collapsed;
            break;
          }
        }
      }

      /// <summary>
      /// 设置换行
      /// </summary>
      public void WrapText()
      {
        foreach (var obj in rgv_Control.Columns)
        {
          obj.WrapText = true;
        }
      }

      /// <summary>
      /// RadGridView控件绑定数据
      /// </summary>
      /// <param name="dt"></param>
      public void BindRadGridViewControl(DataTable dt)
      {
        var num = 0;
        foreach (var newColumn in from object column in dt.Columns select new GridViewTextBoxColumn(column.ToString(), column.ToString()))
        {
          rgv_Control.Columns.Add(newColumn);
        }
        for (var i = 0; i < dt.Rows.Count; i++)
        {
          var cellcount = 0;
          var listRow = new object[dt.Rows.Count + 2];
          listRow[cellcount++] = ++num;
          listRow[cellcount++] = false;
          for (var j = 0; j < dt.Columns.Count; j++)
          {
            listRow[cellcount++] = dt.Rows[i][j];
          }
          rgv_Control.Rows.Add(listRow);
        }
      }

      /// <summary>
      ///
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void Rows_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
      {
        if (e.Action != NotifyCollectionChangedAction.Move) return;
        for (var i = 0; i < rgv_Control.Rows.Count; i++)
        {
          rgv_Control.Rows[i].Cells["Num"].Value = i + 1;
        }
      }

      /// <summary>
      /// 测试数据1
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btn_Data_Click(object sender, EventArgs e)
      {
        var rowIndexList = new List<string>();
        var rows = GetSelData(ref rowIndexList);//测试GetSelData方法
      }

      /// <summary>
      /// 测试数据2
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btn_GetAllData_Click(object sender, EventArgs e)
      {
        var dt = GetAllGridViewData();//测试GetAllGridViewData方法
      }


      }
    }

    SelectColumnForm.cs

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Windows.Forms;
    using Telerik.WinControls.Data;
    using Telerik.WinControls.UI;
    using System.Xml;

    namespace RadGridViewControl
    {
      public partial class SelectColumnForm : Form
      {
      /// <summary>
      /// 定义xml文件
      /// </summary>
      public string Xml { get; set; }

      public SelectColumnForm()
      {
        InitializeComponent();
      }

      public SelectColumnForm(string xml)
      {
        InitializeComponent();
        Xml = xml;
        AddColumns();
        SetRadGridViewProperty();
        var list = ReadXml();
        AddRows(list);
        rgv_SelectColumn.Rows.CollectionChanged += Rows_CollectionChanged;
      }

      /// <summary>
      /// 获取拖动后的数据记录
      /// </summary>
      /// <returns></returns>
      public DataTable GetAllGridViewData()
      {
        var dt = new DataTable();
        foreach (var column in rgv_SelectColumn.Columns)
        {
          var dataColumn = new DataColumn
          {
            ColumnName = column.Name
          };
          dt.Columns.Add(dataColumn);
        }
        foreach (GridViewRowInfo t in rgv_SelectColumn.Rows)
        {
          var datarow = dt.NewRow();
          for (var j = 0; j < dt.Columns.Count; j++)
          {
            datarow[dt.Columns[j].ColumnName] = t.Cells[dt.Columns[j].ColumnName].Value;
          }
          dt.Rows.Add(datarow);
        }
        return dt;
      }


      /// <summary>
      /// 修改xml文件
      /// </summary>
      /// <param name="dt"></param>
      private void ModifyXml(DataTable dt)
      {
        XmlDataDocument doc = new XmlDataDocument();
        try
        {
          doc.Load(Xml);
          XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
          XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
          if (null == dataCellsNode) return;
          XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

          foreach (XmlNode node in dataCellNode)
          {
            var chinesename = node.SelectSingleNode("chinese_name").InnerText;
            var row = SearchRows(chinesename, dt);
            node.SelectSingleNode("show_index").InnerText = (int.Parse(row[0].ToString()) + 1).ToString();
            node.SelectSingleNode("visible").InnerText = row[1].ToString();
            node.SelectSingleNode("width").InnerText = row[3].ToString();
            switch (row[4].ToString())
            {
              case "左对齐":
              node.SelectSingleNode("align").InnerText = "1";
              break;
              case "右对齐":
              node.SelectSingleNode("align").InnerText = "2";
              break;
              case "居中对齐":
              node.SelectSingleNode("align").InnerText = "0";
              break;
              default: break;
              }
            }
          doc.Save(Xml);
        }
        catch (Exception ex)
        {

        }
      }

      private object[] SearchRows(string rowname, DataTable dt)
      {
        foreach (DataRow row in dt.Rows)
        {
          if (row["colname"].ToString() == rowname)
          {
            return row.ItemArray;
          }
        }
        return null;
      }

      /// <summary>
      /// 添加数据行
      /// </summary>
      /// <param name="list"></param>
      private void AddRows(List<SelectColumn> list)
      {
        var count = 0;
        var linqList = (from column in list
                orderby column.ShowIndex
                select column).ToList();
        foreach (var selectColumn in linqList)
        {
          var obj = new object[list.Count];
          obj[0] = ++count;
          obj[1] = selectColumn.IsVisible;
          obj[2] = selectColumn.ChineseColumnName;
          obj[3] = selectColumn.Width;
          switch (selectColumn.Align)
          {
            case 0:
            obj[4] = "居中对齐";
            break;
            case 1:
            obj[4] = "左对齐";
            break;
            case 2:
            obj[4] = "右对齐";
            break;
          }
          rgv_SelectColumn.Rows.Add(obj);
          }
        }

      private void btn_Ok_Click(object sender, EventArgs e)
      {
        var dt = GetAllGridViewData();
        ModifyXml(dt);
        DialogResult=DialogResult.OK;
        Close();
      }

      /// <summary>
      /// 添加数据列
      /// </summary>
      private void AddColumns()
      {
        var num = new GridViewTextBoxColumn("Num", "Num");
        num.HeaderText = "序 号";
        num.ReadOnly = true;
        num.Width = 50;
        num.WrapText = false;
        num.TextAlignment = ContentAlignment.MiddleCenter;

        var chk = new GridViewCheckBoxColumn("Chk", "Chk");
        chk.HeaderText = "选 择";
        chk.ReadOnly = false;
        chk.Width = 50;
        chk.WrapText = false;

        var colname = new GridViewTextBoxColumn("colname", "colname");
        colname.HeaderText = "列 名";
        colname.ReadOnly = true;
        colname.Width = 100;
        colname.WrapText = false;
        colname.TextAlignment = ContentAlignment.MiddleCenter;

        var colwidth = new GridViewDecimalColumn("colwidth", "colwidth");
        colwidth.HeaderText = "列 宽";
        colwidth.ReadOnly = false;
        colwidth.DataType = typeof(int);
        colwidth.Width = 80; ;
        colwidth.WrapText = false;
        colwidth.TextAlignment = ContentAlignment.MiddleCenter;
        colwidth.FormatString = "{0:d}"

        var colalign = new GridViewComboBoxColumn("colalign", "colalign");
        colalign.HeaderText = "对齐方式";
        colalign.DataSource = new[] { "左对齐", "居中对齐", "右对齐" };
        colalign.Width = 100;
        colalign.WrapText = false;
        colalign.TextAlignment = ContentAlignment.MiddleCenter;

        rgv_SelectColumn.Columns.Add(num);
        rgv_SelectColumn.Columns.Add(chk);
        rgv_SelectColumn.Columns.Add(colname);
        rgv_SelectColumn.Columns.Add(colwidth);
        rgv_SelectColumn.Columns.Add(colalign);
      }

      /// <summary>
      /// 设置RadGridView控件属性
      /// </summary>
      private void SetRadGridViewProperty()
      {
        rgv_SelectColumn.EnableGrouping = false;//去掉分组
        rgv_SelectColumn.AllowDrop = true;
        rgv_SelectColumn.AllowRowReorder = true;
        rgv_SelectColumn.AddNewRowPosition = SystemRowPosition.Bottom;
        rgv_SelectColumn.ShowRowHeaderColumn = false;
        rgv_SelectColumn.AllowColumnHeaderContextMenu = false;
        rgv_SelectColumn.AllowColumnResize = false;
        rgv_SelectColumn.AllowColumnReorder = false;
        rgv_SelectColumn.EnableSorting = false;
        rgv_SelectColumn.AllowAddNewRow = false;
        rgv_SelectColumn.AllowRowResize = false;
      }


      /// <summary>
      /// xml文件路径+名称
      /// </summary>
      public List<SelectColumn> ReadXml()
      {
        List<SelectColumn> selectColumns = new List<SelectColumn>();
        XmlDataDocument doc = new XmlDataDocument();
        try
        {

          doc.Load(Xml);

          XmlNode dataTableSettingsNode = doc.SelectSingleNode("DataTable_Settings");//根结点
          XmlNode dataCellsNode = dataTableSettingsNode.SelectSingleNode("data_cells");
          if (null == dataCellsNode) return null;
          XmlNodeList dataCellNode = dataCellsNode.SelectNodes("data_cell");

          foreach (XmlNode node in dataCellNode)
          {
            SelectColumn selectColumn = new SelectColumn();
            selectColumn.ColumnName = node.SelectSingleNode("cell_name").InnerText;
            selectColumn.ChineseColumnName = node.SelectSingleNode("chinese_name").InnerText;
            selectColumn.IsVisible = bool.Parse(node.SelectSingleNode("visible").InnerText);
            selectColumn.Width = int.Parse(node.SelectSingleNode("width").InnerText);
            selectColumn.Align = int.Parse(node.SelectSingleNode("align").InnerText);
            selectColumn.ShowIndex = int.Parse(node.SelectSingleNode("show_index").InnerText);
            selectColumns.Add(selectColumn);
            }
          }
        catch (Exception ex)
        {

        }
        return selectColumns;
      }

      /// <summary>
      /// 行拖动时控件序号的显示
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void Rows_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
      {
        if (e.Action != NotifyCollectionChangedAction.Move) return;
        for (var i = 0; i < rgv_SelectColumn.Rows.Count; i++)
        {
          rgv_SelectColumn.Rows[i].Cells["Num"].Value = i + 1;
        }
        }

      }
    }

  • 相关阅读:
    一键编译go文件命令.bat
    安装go语言,配置环境及IDE,只需3步
    Mysql show Status常用参数详解
    LFS:kernel panic VFS: Unable to mount root fs
    LFS: Interface eth0 doesn't exist
    转:Xshell显示找不到匹配的outgoing encryption算法怎么办
    NTP-ntpdate:no server suitable for synchronization found
    linux/module.h: No such file or directory 内核模块编译过程
    ASCII码表完整版
    [Firmware Warn]: GHES: Failed to read error status block address for hardware error source
  • 原文地址:https://www.cnblogs.com/zhangwei595806165/p/3399698.html
Copyright © 2020-2023  润新知