zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Android开发需要注意的地方
    Android开发 --微信支付开发(转载!)(开发工具:Eclipse)
    Android开发---支付宝功能接口(支付功能)(转载!)
    Android开发--推送
    ASP.NET如何发布更新
    如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
    SQL Server 的远程连接(转载)
    设置如何自动备份数据库并删除2周前的自动备份数据
    如何禁止网页内容被复制以及如何解除禁止(转载并更新!)
    条码生成
  • 原文地址:https://www.cnblogs.com/shuang121/p/3103340.html
Copyright © 2011-2022 走看看