zoukankan      html  css  js  c++  java
  • winform DataGridView控件开发经验

    1.不让DataGridView控件自动生成列

    设置AutoGenerateColumns 为false.

    dgTicket.AutoGenerateColumns = false; //将自动生成列禁用

    2.DataGridView中RowsAdded事件的注意事项

    在ASP.NET中的GridView控件在显示绑定数据时有一个RowDataUpdated事件,在其事件响应函数里可以逐行扫描每行所绑定的数据,根据需要可以修改GridView显示的格式或Value等,比较方便。

    而在WinForm工程中,与之类似的DataGridView控件,只有RowsAdded事件与之类似,但与GridView不同的是,RowsAdded事件的响应不像RowDataUpdated那样逐条响应,我在Debug很久才发现这个问题,其实只要看到DataGridViewRowsAddedEventArgs e的属性中的RowCount就明白,RowsAdded事件响应时可能插入多行,也可能插入单行(Rows可是复数形式,笨)。故,使用e.RowIndex获取插入行的索引值,e.RowCount获取插入行的数量,使用这两个变量可以方便地遍历所绑定的数据,代码如下所示:

    private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)  
    {  
        int rowIndex = e.RowIndex;  
        int rowCount = e.RowCount;  
        for (int i = rowIndex; i < rowIndex + rowCount; i++)  
        {  
            //绑定的为List<AccountInfo>数据集,此处获取指定行绑定的数据  
            AccountInfo info = this.dataGridView1.Rows[i].DataBoundItem as AccountInfo; 
    
            /////////////////////////////////////////  
            // 其他数据操作等  
            ///////////////////////////////////////////  
         }  
    }

    3.与asp.net RowDataBound 等价的事件是CellFormatting 事件

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
     {
            //bala bala
    }

    4.获取DataGridViewCheckBoxCell的选中状态

    private void butUpdate_Click(object sender, EventArgs e)
            {
                bool IsCheck = false;
                int count = this.dataGridView1.RowCount;
                Merchandise_Info mi = new Merchandise_Info();
                for (int i = 0; i < count; i++)
                {
                    //if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)
                    if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)
                    {
                        mi.Name = this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString();
                        IsCheck = true;
                        MessageBox.Show(this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString());
                    }
                   
                }
                if (IsCheck == false)
                {
                    MessageBox.Show("请先选择要修改的行!", "系统提示");
                }
            }

    解释:(DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0] //先把行i第0列(行i第0列里放的是CheckBox控件)的转换成DataGridViewCheckBoxCell

    (bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) //在转换成bool类型!

    最关键的地方是:以下是通过两种方式判断CheckBox的选中状态!

    (1)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)
    (2)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)

    两者的区别是:如果你采用(1)方法,则你必须先给CheckBox控件设初始值(要先把CheckBox的值设为已选或为选或者你要先把CheckBox勾上,总之你要动一下CheckBox或者给他先赋值),否则会出错:“未将对象引用设置到对象的实例。”

    如果你采用方法(2)则不用给CheckBox控件设初始值,EditedFormattedValue是获得单元格当前格式化的值,而不考虑当前单元格是否是处于编辑状态,也不论也不论是否尚未提取此值!所以不用给CheckBox控件设初始值。

    哈哈!获得是否选中后就可以获得选中行的值了!!

    5.设置行高

    //设置行高为21px
       this
    .dataGridView1.RowTemplate.Height = 21;
      
    // 禁止用户改变DataGridView1的所有列的列宽
         DataGridView1.AllowUserToResizeColumns = false;
         //禁止用户改变DataGridView1所有行的行高
         DataGridView1.AllowUserToResizeRows = false;

  • 相关阅读:
    CCF-CSP的第三题们么
    STL
    信息安全-期末复习
    NLP自然语言处理
    python 处理文件
    信息安全-简易的DES加解密--3DES
    试药的常见问题
    关于试药的那些事
    Excel的单列和多列的拆分与合并
    Excel中的文本提取操作
  • 原文地址:https://www.cnblogs.com/weekend001/p/3517184.html
Copyright © 2011-2022 走看看