[DevExpress]GridControl 同步列头checkbox与列中checkbox状态

关键代码:

        /// <summary>
        /// 同步列头checkbox与列中checkbox状态
        /// </summary>
        /// <param name="view">GridView</param>
        /// <param name="fieldeName">需要绘制Checkbox的列名</param>
        /// <param name="e">MouseEventArgs</param>
        public static void SyncCheckStatus(this GridView view, string fieldeName, MouseEventArgs e)
        {
            /*说明:
             *在MouseDown事件中使用
             *参考:https://www.devexpress.com/Support/Center/Question/Details/Q354489
             *eg:
             *private void gvLampConfig_MouseDown(object sender, MouseEventArgs e)
             *{
             *GridView _view = sender as GridView;
             *_view.SyncCheckStatus(gcCheckFieldName, e);
             *}
             */
            if (e.Clicks == 1 && e.Button == MouseButtons.Left)
            {
                view.ClearSorting();
                view.PostEditor();
                GridHitInfo _info;
                Point _pt = view.GridControl.PointToClient(Control.MousePosition);
                _info = view.CalcHitInfo(_pt);
                if (_info.InColumn && _info.Column.FieldName.Equals(fieldeName))
                {
                    if (getCheckedCount(view, fieldeName) == view.DataRowCount)
                        UnChekAll(view, fieldeName);
                    else
                        CheckAll(view, fieldeName);
                }
            }
        }
        private static int getCheckedCount(GridView view, string filedName)
        {
            int count = 0;
            for (int i = 0; i < view.DataRowCount; i++)
            {
                object _cellValue = view.GetRowCellValue(i, view.Columns[filedName]);
                //if (_cellValue != null && !(_cellValue is DBNull))
                if (_cellValue == null) continue;
                if (string.IsNullOrEmpty(_cellValue.ToString().Trim())) continue;
                bool _checkStatus = false;
                if (bool.TryParse(_cellValue.ToString(), out _checkStatus))
                {
                    //if ((bool)_cellValue)
                    if (_checkStatus)
                        count++;
                }
            }
            return count;
        }
        private static void CheckAll(GridView view, string fieldName)
        {
            for (int i = 0; i < view.DataRowCount; i++)
            {
                view.SetRowCellValue(i, view.Columns[fieldName], true);
            }
        }
        private static void UnChekAll(GridView view, string fieldName)
        {
            for (int i = 0; i < view.DataRowCount; i++)
            {
                view.SetRowCellValue(i, view.Columns[fieldName], false);
            }
        }

代码使用:

        private void gvLampConfig_MouseDown(object sender, MouseEventArgs e)
        {
            GridView _view = sender as GridView;
            _view.SyncCheckStatus(gcCheckFieldName, e);
        }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }代码效果:

[DevExpress]GridControl 同步列头checkbox与列中checkbox状态

时间: 2024-11-06 03:25:52

[DevExpress]GridControl 同步列头checkbox与列中checkbox状态的相关文章

PHP:数字转Excel列头

转自我的个人博客:阔野飞花 http://www.rexcao.net/archives/169 前段时间升级一个项目的Excel导出功能,这次的列数大概有60多条,在处理过程中发现一个问题,原先做好的数字转Excel列头功能现在只到 AZ列就结束了,那显然是不够用啊,后来再仔细查看,发现,原来AZ列之后的内容显示到AAA列上面了,然后看了看原来的代码才发现,原来的逻辑错了! 我原来的错误逻辑是这样的:A-Z,Z下来是AA,AA-AZ,AZ下来是AAA,下来是AAAA依次类推...但是Excel

[DevExpress]GridControl 列头绘制Checkbox

关键代码: /// <summary> /// 为列头绘制CheckBox /// </summary> /// <param name="view">GridView</param> /// <param name="checkItem">RepositoryItemCheckEdit</param> /// <param name="fieldName">需要

实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. 1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty; 9 private GridColumn checkBoxColumn = null; 10 privat

GridControl实现多选和列头全选

大名鼎鼎的DEV啊……弄了一个gridControl结果不知道如何加选择列,还有表头全选上网搜了搜终于搜到解决方案……结果解决办法麻烦的要死…… 这么一个挺基础的需求,DEV不提供解决方案?这没道理吧?怎么办啊……就差这一个功能了……换控件不划算啊 有这么一个方法来完成(只适合winform): 1.     绑定数据的源表添加一列      DataTable dt = ds.Tables[0]; dt.Columns.Add("selected", System.Type.GetT

gridcontrol的列头右键菜单问题

Dev控件GridControl设置了一个右键菜单 this.gridControl1.ContextMenu = contextMenu2; 而GridControl在运行排序的时候,即 gridview1->OptionsCustomization->AllowSort设为true时,控件自带一个英文的右键菜单如下 这样当点击表列头时,就会出现下面的两个右键菜单重叠问题. 这样当点击表列头时,就会出现下面的两个右键菜单重叠问题. 解决办法: privatevoid gridView1_Mo

[Devexpress]GridControl 绑定DataSource时GridView列不变化

Devexpress  GridControl 绑定DataSource时GridView列不变化 1.使用VS自带的DataGridView替代 2.数据绑定以后调用 gridView.PopulateColumns()  函数 重新创建列 gcSummary.DataSource = _dtData; gvSummary.PopulateColumns();

在DevExpress GridControl的一列中显示图片

最近做项目的时候用到了将GridControl中一列设置为PictureEdit类型,然后通过这一列来显示图片.经过尝试发现有以下两种方式可行. 方法一.知道图片的路径与名称 比如:在数据库中存储了图片的路径(包括:本地路径.服务器路径),那么在可以通过非绑定列的方式来实现. 1.创建了一个非绑定列并设置其相应的属性,属性设置如下: FieldName设为 Photo(该字段名必须是唯一的) UnboundType设为 UnboundColumnType.Object ColumnEdit设为R

DataGrid列头 checkBox 绑定方式

<DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <CheckBox x:Name="chkSelectAll" HorizontalAlignment="Center" VerticalAlignment="Center" Click="SelectedAll_Checked" IsChecked="{Binding Rela

WPF DataGrid DataGridTemplateColumn 列头checkbox如何在代码中取消选择

0 登录进行投票 <DataGrid Name="DG">                <DataGrid.Columns>                    <DataGridTemplateColumn Width="70">                        <DataGridTemplateColumn.HeaderTemplate>                            &l