C# WinForm 关于DataGridView

C# WinForm 关于DataGridView

由于在项目中需要用到DataGridView 显示数据,遇到可记录的关于DataGridView的属性和时间

  1. 设置DataGridView 的字体大小
    datagridview.Font = new System.Drawing.Font(“宋体”, 15);

  2. 选中整行
    datagridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

  3. 只能选中一行
    datagridview.MultiSelect = false;//true 可多选

  4. 自动填充列的宽度
    datagridview.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

  5. 行的最前端 空白列 不显示
    datagridview.RowHeadersVisible = false;

  6. 禁止自动添加列
    datagridview.AutoGenerateColumns = false;

  7. 绑定数据
    DataTable table = new DataTable();
    datageidview.DataSource = table;

  8. 代码添加列
    DataGridViewCell dgvcell1 = new DataGridViewTextBoxCell();//声明一个单元格,输入框类型
    DataGridViewColumn column= new DataGridViewColumn();//声明一个列
    column.Name = “列名”;//不显示,取值时使用
    column.DataPropertyName = “绑定的表格中的列名”;
    column.HeaderText = “列标题”;//显示在表格的最上面
    column.CellTemplate = dgvcell1;//此列单元格的模板
    column.ReadOnly = true;//只读

  9. DataGridView 中 点击CheckBox 所在单元格即选中CheckBox
    1、 先设置CheckBox 列 为ReadOnly
    2、 在 DataGridView的CellClick 事件中,写入一下代码

private void DataGridView_CellClick(object sender,DataGridViewCellEventArgs e)
{
	try
	{
		//e.ColumnIndex 为当前点击的单元格的列的下标
		//e.RowIndex为当前点击的单元格的行的下标
		int CheckColumnIndex=0;//DataGridView中 CheckBox 列的下标
	 	//判断如果当前点击的单元格是checkBox 并且 不是列的头部
	 	if(e.columnIndex == CheckColumnIndex && e.RowIndex >= 0 )
	 	{
		    bool bl_checked = (bool)this.datagridview.rows[e.RowIndex].cells[e.ColumnIndex].formattedValue;//获取当前单元格的格式化的值
		    this.datagridview.rows[e.RowIndex].cells[e.ColumnIndex].Value = !bl_checked ;//设置为相反状态,达到点击选中,再点击取消 目的
	 	}
	}
	catch(Exception ex){
		MessageBox.Show(ex.Message);
	}
}

  1. 点击DataGridView 列头 触发的事件为 ColumnHeaderMouseClic

  2. 设置 双击DataGridView时不排序

    foreach(DataGridViewColumn column in datagridview.Columns)
      {
      	column.SortMode = DataGridViewColumnSortMode.NotSortable;
      } 
    
  3. 循环DataGridView选中行集合(不是选中数据行的单元格的checkbox噢)
    由于删除时,DataGridView中行的下标是一直变化的,所以,从最后的选中行开始循环

	for(int i = datagridview.SelectedRows.Count-1;i>=0;i--)
	{
		int index =	datagridview.SelectedRows[i].Index;//获取选中行的下标
		this.datagridview.Rows.RemoveAt(index);//删除指定下标的行
	}

  1. 显示数据时,用“*”代替字母时,可以用CellForMatting 事件
    但此时修改此列单元格数据时,还是会显示出输入的数据哦~
   private void datagridview_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e)
   {
       //pwd 是 datagridview 中 需要显示 * 的列的列名
  		if(this.datagridview.Columns[e.ColumnIndex].Name = "pwd")//判断当前列的列名是否是需要用*的列名
  		{
  				if(e.Value !=null&&Convert.ToString(e.Value).Trim().Length >0)
  				{
  					e.Value = new string("*",Convert.ToString(e.Value).Trim().Length);
  				}
   	}
   }
  1. 想要显示与修改时都用"*"代替,需要加上EdittingControlShowing时间哦
private void datagridview_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
{
	try{
		TextBox box = e.Control as TextBox;
		if(box != null)
		{
			//pwd 是 datagridview 中 需要显示 * 的列的列名
			if(datagridview.columns[datagridview.CurrentCell.ColumnIndex].Name = "pwd")
			{
				box.PasswordChar = "*";
			}
			else 
			{
				box.PasswordChar = new Char();
			}
		}
	}
	catch(Exception ex){
		MessageBox.Show(ex.Message);
	}
}
  1. 使用DataGridView显示数据时,某列只能添加,不能修改
    两种方式实现
    1、使用CellFormatting事件
		private void datagridview_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e)
		{
			if(datagridview.Columns[e.ColumnIndex].Name = "只能添加不能修改的列的列名")
			{
				if(!string.IsNullOrEmpty(Convert.ToString(e.Value)))
				{
					//datagridview.Rows[e.RowIndex].cells[e.ColumnIndex] 等于 datagridview[e.ColumnIndex,e.RowIndex]
					datagridview.Rows[e.RowIndex].cells[e.ColumnIndex].ReadOnly = true;
				}
			}
		}
2、 使用CellBeginEdit 事件
		private void datagridview_CellBeginEdit(object sendder,DataGridViewCellCancelEventArgs e)
		{
			DataGridView dgv=(DataGridView)sender;
			//判断是否可以编辑,如果列名为id并且 值不为空就不能编辑
            if (dgv.Columns[e.ColumnIndex].Name == "id" && !string.IsNullOrEmpty(Convert.ToString(dgv["id", e.RowIndex].Value)))
            {
                //不能编辑
                e.Cancel = true;
            }
		}
  1. 数据绑定情况下,向datagridview添加新行
    DataTable table = (DataTable)datagridview.DataSource;
    DataRow row=table.NewRow();
    table.Rows.Add(row);

  2. 点击按钮时,选中单元格为编辑状态
    dgv_vipinfo.Focus(); //获取datagridview的焦点
    dgv_vipinfo.CurrentCell = dgv_vipinfo.CurrentRow.Cells[“user_no”]; //把要指定为编辑单元格的信息赋给当前活动的单元格
    this.dgv_vipinfo.BeginEdit(true);//开始编辑

好啦,学的比较基础,暂时就这样啦,以后碰到其他的再更新。

有更好的方法或者其他关于DataGridView控件的知识,非常希望能够学习!!!

如果哪里有错误,欢迎指出!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值