zoukankan      html  css  js  c++  java
  • dev 中的GridControl中的行实现选择的功能实现

      1、项目有实现不GridControl中的数据导出Excel的功能,导出的时候是把所有的数据全部导出,现在要实现可供选择的灵活的导出功能。除了全选可全不选,还可以对每一行实现选择的功能。实现起来比较简单,界面也很简单,先贴一下实现的界面。

      2、实现思路:先要在传给GridControl的DataTable中增加新的字段,字段名称可以自己选择,显示出方框的形状以供选择。默认全部选择,所以调用函数时,传入的isSelected为false。实现代码:

     public void AddChooseColumn(DataTable dt, bool isSelected)
            {
                if (dt == null || dt.Rows.Count == 0) { return; }
                if (dt.Columns.Contains("CHOOSE")) { return; }
                dt.Columns.Add("CHOOSE", typeof(Boolean));
                dt.Columns["CHOOSE"].DefaultValue = false;
                foreach (DataRow row in dt.Rows)
                    row["CHOOSE"] = isSelected;
                dt.AcceptChanges();
            }

      3、实现全选和全部不选的功能,由第二步知道当新增字段“CHOOSE”为false时是,全不选,那么当用户单击CheckEdit时(窗体上的全选选择框name为chkSelectAll)时,把字段“CHOOSE”设置成true即可实现全选功能。全选选择框的实现代码如下:

     Action<bool> allOrNotAll = flag =>
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        foreach (DataColumn column in dt.Columns)
                        {
                            string name = column.ColumnName;
                            if (name.Equals(DataTableField.CHOOSE.ToString()))
                            {
                                row[name] = flag;
                            }
                        }
                    }
                };
      //全选
      this.chkSelectAll.CheckStateChanged += (x, y) => allOrNotAll(this.chkSelectAll.Checked);

    原本的代码是这样的:this.chkSelectAll.CheckStateChanged += delegate{ allOrNotAll(this.chkSelectAll.Checked);};因为有大括号,所以delegate之后的大括号在代码中单独占了一行,而大括号中的代码却只有一行,所以为了看起来更加清晰,改为了: this.chkSelectAll.CheckStateChanged += (x, y) => allOrNotAll(this.chkSelectAll.Checked); 参数想x,y是,object,EventArgs,在代码中没有用到,所以简单命名成想x,y.

      4、现在实现单选一行就可以了,思路是:当用户单击时,根据单击的坐标,对应的DataRow,如果对应的ColumnName=“CHOOSE”,那么就可以断定是要选择这一行。所以把数据中的row["CHOOSE"]设置为true,显示选中状态即可。代码如下所示。

     private static void SelectTicket(MouseEventArgs e, ColumnView gridView, string columnFieldName)
            {
                GridHitInfo hint = (GridHitInfo)gridView.CalcHitInfo(e.X, e.Y);
                if ((gridView.RowCount <= 0) || (!hint.InRowCell) || (hint.Column != gridView.Columns[columnFieldName]))
                    return;
                DataRow hintRow = gridView.GetDataRow(hint.RowHandle);
                if (hintRow == null)
                    return;
                if (hintRow[columnFieldName] == null)
                    return;
                hintRow["CHOOSE"] = !(bool)hintRow["CHOOSE"];
            }

    调用此函数的代码是:

                this.gridOperatorTask.Click += (obj, e) => SelectTicket((MouseEventArgs)e, this.advBandedGridView1, "CHOOSE");

    到此功能已经实现了。

      感想:最近要过年了,一直都心思没写博客,看到别人写的很好的博客,从其中学到了好多知识,心里非常感激。今天把自己解决的问题写出来,万一有人遇到了可以参考一下。知识在于分享,以后要像其他优秀的人那样,不仅在停学习新的知识,而且把心得、总结写成博客分享出来,有很多的文章都使我受益匪浅。

  • 相关阅读:
    使用最小花费爬楼梯
    AVAudioPlayer 如何在页面呈现之后按需初始化
    给 UILabel 中的文字增加 line-through / Strikethrough (删除线)样式
    如何在普通 UIViewController 中使用 UITableView
    如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称
    在 UIViewController 中手动增加 TableView 出现 Type 'SomeViewController' does not confirm to protocol 'UITableViewDataSource' 问题的解决办法
    iOS 8 录音重放出现 OSStatus error 1685348671 / 2003334207 问题的解决办法
    performSegueWithIdentifier 不生效的解决办法
    AutoLayout 根据文字、图片自动计算 UITableViewCell 高度
    iOS7 UITableView Row Height Estimation
  • 原文地址:https://www.cnblogs.com/zhangyuanbo12358/p/4272726.html
Copyright © 2011-2022 走看看