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;
  }
}

猜你喜欢

转载自blog.csdn.net/csdn102347501/article/details/78316567
今日推荐