C# winForm DataGirlView改变列类型,并执行相关事件

       

       图一

      

      在实际的应用软件开发中,对类似表格的格式有着特殊的需求,比如像上面两个就是,图一 项目名称有很多,要求用下拉框显示出来,图二要求用复选框来选择要操作的行

这就要求我们需要改变一下列的类型,并执行相关的操作,下面就来简单说说如何实现这些

一、首先在DataGrilView中改变列的显示类型

     在DataGirlView中内置了这些类型,我们只需要根据需要选择下即可,

   

然后在Item或者相关地方赋值即可,这是手动改变状态,并添加数据,下面看看如何动态添加数据

     List<SPItems> lstItems = new SPItems().SelectList("0","",0);

            DataGridViewComboBoxColumn colShow = new DataGridViewComboBoxColumn();
            colShow.Name = "spaceType";
            colShow.HeaderText = "项目名称";
            colShow.Width = 200;
           
            colShow.DataSource = lstItems;
            colShow.DisplayMember = "Name";
            colShow.ValueMember = "ID";
            colShow.DisplayIndex = 0;
            dgvProject.Columns.Insert(1, colShow); 

从上面我们可以看到需要先创建定义一个需要的列的类型 DataGridViewComboBoxColumn colShow = new DataGridViewComboBoxColumn();
然后进行相关的赋值操作,最后插入到DataGrilView中即可dgvProject.Columns.Insert(1, colShow);

其次,执行相关的事件,比如根据下拉选中的值,执行相关的操作

正常响应CellValueChanged()事件时,当改变Combox状态时,只有当焦点离开该单元格时才能触发CellValueChanged()事件,

如果要改变Combox值时实时触发CellValueChanged()事件,需要借用CurrentCellDirtyStateChanged()事件来提交未提交控件的更改。

 

     private void dgvProject_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (dgvProject.IsCurrentCellDirty)
            {
                dgvProject.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }
        }

 

这样CellValueChanged()事件就可以随着checkbox的值的改变实时触发;

     private void dgvProject_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.RowIndex != -1 && !dgvProject.Rows[e.RowIndex].IsNewRow)
            {
                if (e.ColumnIndex == 1)
                {
                   
                 string vv  = this.dgvProject[e.ColumnIndex, e.RowIndex].Value.ToString();
                 SPItems item = new SPItems(Convert.ToInt32(vv));
                 dgvProject.Rows[e.RowIndex].Cells[2].Value = item.BonusMoney;
                                }
            }
        }

根据e.ColumnIndex来确定当触发那一列的时候会执行事件

 注意:

1、获得值: 

DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgvPayDetails.Rows[i].Cells["SelIndex"];
Boolean flag = Convert.ToBoolean(checkCell.Value);

DataGridViewComboBoxCell checkCell = (DataGridViewComboBoxCell)dgvProject.Rows[i].Cells[1];     

 int   vv =Convert.ToInt32(checkCell.Value);

原文地址:https://www.cnblogs.com/shuang121/p/3103340.html