• 在Winform的DataGrid添加自定义boolColumn


    似乎这是个比较常用的功能,不过还是第一次作,没有想到什么更好的方法,我是用一个前台的临时表实现的.
    测试用的数据库为SqlServer ,默认的Northwind数据库,Customers表.
    新建一个窗体,加入一个DataGrid,先取表中所有数据,放到数据集dsCustomer里面.
    然后建立一个临时表dtCustomer,拷贝dsCustomer里面存放数据的表的副本到dtCustomer.加入选择字段dcSelected(DataColumn类),遍历一次dtCustomer里面的记录,给dcSelected字段赋值.

    建立表格样式,字段样式当然要根据dtCustomer的结构来定义了,并映射到表dtCustomer,然后绑定就可以.

    使dcSelected列可以修改,只要在DataGrid的单击事件中加入代码就可以了.

    具体需要的代码如下:
    1.创建绑定时需要的临时数据表.

    private DataTable dtTemp = null;

            
    private void CreateTempTable(DataSet dsInit, string tableName)
            
    {
                
    if (dsInit != null && dsInit.Tables[0!= null)
                
    {
                    dtTemp 
    = dataSet11.Tables[0].Copy();
                    DataColumn dc 
    = new DataColumn("IsSelected"typeof(bool));
                    dtTemp.Columns.Add(dc);
                    
    foreach(DataRow dr in dtTemp.Rows)
                    
    {
                        dr[
    "IsSelected"= true;
                    }
                               
                }

                dtTemp.TableName 
    = tableName;            
            }

    2.设置DataGrid的样式(这里面的列就按照需要的自己定义好了,前提是必须包含在你所创建的临时数据表中)

        private void SetDataGridTyle(string tableName)
            
    {
                DataGridTableStyle tableStyle 
    = new DataGridTableStyle();
                tableStyle.MappingName 
    = tableName;
                DataGridBoolColumn dgbcSelected 
    = new DataGridBoolColumn();
                dgbcSelected.HeaderText 
    = "IsSelected";
                dgbcSelected.MappingName 
    = "IsSelected";
                tableStyle.GridColumnStyles.Add(dgbcSelected);

                DataGridTextBoxColumn dgtbcCity 
    = new DataGridTextBoxColumn();
                dgtbcCity.HeaderText 
    = "Cityy"            ;
                dgtbcCity.MappingName 
    = "City";
                tableStyle.GridColumnStyles.Add(dgtbcCity);
                
    this.dataGrid1.TableStyles.Clear();
                
    this.dataGrid1.TableStyles.Add(tableStype);
            }

    3.允许单击修改选择列

    private void dataGrid1_Click(object sender, System.EventArgs e)
            
    {
                
    if (dataGrid1.CurrentCell.ColumnNumber == 0)
                
    {
                    
    bool s = false;
                    
    if (dtTemp.DefaultView[dataGrid1.CurrentRowIndex]["IsSelected"== DBNull.Value)
                    
    {
                        s 
    = true;
                    }

                    
    else
                    
    {
                        s 
    = bool.Parse(dtTemp.DefaultView[dataGrid1.CurrentRowIndex]["IsSelected"].ToString());
                    }

                    dtTemp.DefaultView[dataGrid1.CurrentRowIndex][
    "IsSelected"= !s;
                    dataGrid1.Refresh();
                }

            }

    通过上述操作,我们就可以在不影响显示的情况下,根据行记录前面的CheckBox来选择我们需要的数据.
     
    后面又补充了在列标题加入CheckBox实现全选功能,不过有些牵强...
    http://snowlove67.cnblogs.com/archive/2005/12/20/300910.html

  • 相关阅读:
    java集合 stream 相关用法(1)
    ICE新手入门版
    spring中关于FeignClient的错误 QueryParam.value() was empty on parameter 1
    Java Base64解析
    Java RSA加密以及验签
    项目拆分子工程(简单版)
    mysql "ON DUPLICATE KEY UPDATE" 的使用
    关于多定时任务开发
    AtomicInteger保证线程安全的全局变量
    C++矩阵库 Eigen 快速入门
  • 原文地址:https://www.cnblogs.com/snowlove67/p/282737.html
Copyright © 2020-2023  润新知