- 控件名: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可能包含多种样式的列,往往列之间需要一些交互,举个栗子。
首先,我们初始设置名称和控件两列的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;
}
}