zoukankan      html  css  js  c++  java
  • Winfrom控件之DataGridView

    • 控件名:DataGridView
    • CS框架:WinFrom
    • 编程语言:C#

    一.常用属性
    1.布局
    ReadOnly(是否可编辑)
    AllowUserToAddRows(隐藏底部空行)
    RowsHeadersVisible(隐藏首列)
    DataSource(绑定数据源)
    AutoGenerateColumns(绑定数据源后,不自动生成列)
    AutoSizeColumnsMode(自动列宽,FILL可解决滑条遮挡问题,但需要第一列frozen值为true。FILL模式下,可通过Columns列权重属性FILLWeight来控制列宽度自动化占比)
    AutoSizeRowsMode(自动行高)
    SelectionMode (选中模式,FullRowSelect为选中整行)
    2.添加行
    dataGridView.Rows.Clear();//清空所有行
    dataGridView.Rows.Add();//添加行
    dataGridView.Rows[行号].Cells[列序号].value=值 //赋值行某列文本值
    ((DataGridViewCheckBoxCell)dataGridView.Rows[行号].Cells[列序号]).Value//赋值下拉框值
    3.取值
    3.0 通用
    dataGridView.CurrentRow.Index(获取选中索引)
    dataGridView.CurrentCell.Value(获取选中单元格)
    3.1 列类型:Textbox
    dataGridView.Rows[行号].Cells[列号].Value.ToString()(取某行某列值)
    3.2 列类型:CheckBox
    取某行某列的值
    (DataGridViewCheckBoxCell)dataGridView.Rows[行号].Cells[列号]).(EditedFormattedValue&FormattedValue)
    取选中单元格的值
    ((DataGridViewCheckBoxCell)dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[列号]).EditedFormattedValue.Tostring()
    在这里,Check选中值分为两种属性。
    EditedFormattedValue 编辑状态check值
    FormattedValue 非编辑状态check值
    3.3 列类型:ComBobox
    dataGridView.Rows[行号].Cells[列号].EditedFormattedValue.ToString()
    4.方案
    4.1单向绑定。
    该方法使用DataSource绑定数据模型,程序可以通过操作数据模型(改变变量)来控制视图(控件同步改变数据),并且DataSource包含相应事件可供功能拓展。
    4.2双向绑定
    如需实现双向绑定,在视图修改后(控件值修改后)数据模型(变量)也发生变化,只需在CellEndEdit事件赋值即可。

    private void dataGridView_CellEndEdit(object sender,DataGridViewCellEventArgs e)
       {
          DataTable变量名.Rows[e.ColumnIndex][e.RowIndex] = dataGridView.CurrentCell.Value.ToString();            
       }

    5.多类型列交互
    在我们使用中,一个DataGridView可能包含多种样式的列,往往列之间需要一些交互,举个栗子。
    多元化控件操作DEMO1
    首先,我们初始设置名称控件两列的ReadOnly为True,处于不可编辑状态。
    自定义列勾选时,名称控件列ReadOnly为False可编辑,允许用户输入。
    自定义列不勾选时,自动清空名称控件列内容,同时关闭两列可编辑状态。
    在这里试了很多属性,目前发现CellContentClick的触发是最有即时性效果的,具体操作代码如下。

    private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
       {              if(((DataGridViewCheckBoxCell)dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[1]).EditedFormattedValue.ToString() == "False")//如果自定义列未选中
        {  
        //清空后面两列的内容             dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[2].Value = "";            dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[3].Value = "";   
        //关闭后面两列的编辑状态          dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[2].ReadOnly = true;            dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[3].ReadOnly = true;
        }
      else
        { 
        //开启后面两列的编辑状态             dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[2].ReadOnly = false;             dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[3].ReadOnly = false;
      }
    }
  • 相关阅读:
    SpringBoot SpringSession redis 共享 SESSION
    SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active
    SpringBoot CGLIB AOP解决Spring事务,对象调用自己方法事务失效.
    SpringBoot整合Mybatis,多数据源,事务,支持java -jar 启动.
    SpringBoot整合SpringSecurity,SESSION 并发管理,同账号只允许登录一次
    SpringBoot idea maven打包war
    动态添加数据源,根据用户登录切换数据库.编程式Spring事务.
    MYSQL,触发器,实现两个表共用ID不重复
    试着简单易懂记录synchronized this object Class的区别,模拟ConcurrentHashMap
    Enum枚举写的一个简单状态机
  • 原文地址:https://www.cnblogs.com/magicalconch/p/14457578.html
Copyright © 2011-2022 走看看