zoukankan      html  css  js  c++  java
  • C#利用DataGridView实现数据的快速输入

    在做管理软件时,常常需要表格输入功能。表格输入极大地加快了数据输入,提高了工作效率,当然也提高了软件的竞争性。笔者最近用C#在做一套CRM时,成功地使用C# 2005里面的表格控件DataGridView实现了表格输入功能,现在就把具体实现与各位分享: 
    1. 初始化工作 
    (1) 在Vs 2005 里面新建一个C# WinForm 应用程序: DataGridViewTest 
    (2) 在窗体Form1上拖一个DataGridView控件:DataGridView1 
    (3) 在DataGridView1里添加两个列: 
    Column1: 
    类型:DataGridViewComboBoxColumn 
    HeaderText:时间 
    DataPropertyName:DutyTime 
    Column2: 
    类型:DataGridViewTextBoxColumn 
    HeaderText:时间 
    DataPropertyName:DutyTime 

    (4)在Form1类中添加两个私有属性: 
    private DataTable m_Table;//输入组合框控件的下拉数据 
    private DataTable m_DataTable;//与表格绑定的DataTable,即用户输入的最终数据 

    (5)在Form1类里面定义一个结构体 

    public struct MyRowData 

    public MyRowData(int no, string enDay, string cnDay) 

    No = no; 
    EnDay = enDay; 
    CnDay = cnDay; 

    public int No; 
    public string EnDay; 
    public string CnDay; 
    }

    (6) 在Form1的load事件Form1_Load(object sender, EventArgs e) 加上以下初始化代码: 


    this.dataGridView1.AllowUserToAddRows = true; 
    this.dataGridView1.AllowUserToDeleteRows = true; 
    this.dataGridView1.AutoGenerateColumns = false; 
    DataColumn dc1, dc2, dc3 
    dc1 = new DataColumn("No", typeof(int)); 
    dc2 = new DataColumn("EnDay", typeof(string)); 
    dc3 = new DataColumn("CnDay", typeof(string)); 
    m_Table.Columns.Clear(); 
    m_Table.Columns.AddRange(new DataColumn[] { dc1, dc2, dc3 }); 
    MyRowData[] Datas = new MyRowData[7]{ 
    new MyRowData( 1,"Monday","星期一"), 
    new MyRowData( 2,"Tuesday","星期二"), 
    new MyRowData( 3,"Wednesday","星期三" ), 
    new MyRowData( 4,"Thursday","星期四" ), 
    new MyRowData( 5, "Friday","星期五"), 
    new MyRowData( 6,"Saturday","星期六"), 
    new MyRowData( 7,"Sunday","星期日") 
    }; 
    this.m_Table.Rows.Clear(); 
    foreach (MyRowData iData in Datas) 

    this.m_Table.Rows.Add(iData.No, iData.EnDay, iData.CnDay); 


        
    DataColumn dataDc1, dataDc2; 

    dataDc1 = new DataColumn("DutyTime", typeof(int)); 
    dataDc2 = new DataColumn("DutyPerson", typeof(string)); 
    m_DataTable.Columns.Clear(); 
    m_DataTable.Columns.AddRange(new DataColumn[] { dataDc1, dataDc2}); 
    m_DataTable.Rows.Clear(); 

    Column1.DataSource = this.m_Table; 
    Column1.DisplayMember = "CnDay"; 
    Column1.ValueMember = "No"; 

    this.dataGridView1.DataSource = m_DataTable; 


    2.消息处理(核心) 
    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) //激活回车键 

    int WM_KEYDOWN = 256; 
    int WM_SYSKEYDOWN = 260; 

    bool IsDataGridView1 = false; 
    if (this.ActiveControl == this.dataGridView1) 

    IsDataGridView1 = true; 

    else 

    if (this.ActiveControl is IDataGridViewEditingControl) 

    if( (this.ActiveControl as IDataGridViewEditingControl).EditingControlDataGridView == this.dataGridView1) 

    IsDataGridView1 = true; 




    if (IsDataGridView1) //是否处于DataGridView1 上 

    if (msg.Msg == WM_KEYDOWN ¦ msg.Msg == WM_SYSKEYDOWN) 

    switch (keyData) 

    case Keys.Delete: 
    if (this.dataGridView1.CurrentCell != null 
    && this.dataGridView1.CurrentCell.RowIndex < this.m_DataTable.Rows.Count) 

    this.m_DataTable.Rows[this.dataGridView1.CurrentCell.RowIndex].Delete(); 
    this.m_DataTable.AcceptChanges(); 

    break; 
    case Keys.Enter: 
    if (this.dataGridView1.CurrentCell is DataGridViewComboBoxCell 
    ¦ ¦ this.dataGridView1.CurrentCell is DataGridViewTextBoxCell 
    )//处于输入格 

    // SendKeys.Send("{F4}"); 
    if (this.ActiveControl is System.Windows.Forms.DataGridViewComboBoxEditingControl 
    ¦ ¦ this.ActiveControl is System.Windows.Forms.DataGridViewTextBoxEditingControl 


    SendKeys.Send("{Tab}"); 

    else//非输入状态,将转入输入状态 

    if (this.dataGridView1.CurrentCell is DataGridViewTextBoxCell)//快捷按键F2,进入编辑状态 

    SendKeys.Send("{F2}"); 

    else //combobox,快捷按键F4,弹出下拉框 

    SendKeys.Send("{F4}"); 




    else//处于非输入格 

    SendKeys.Send("{Tab}"); 

    return true; 
    break; 



    return false; 

     

  • 相关阅读:
    转 MySQL 日期类型详解
    ServiceStack.OrmLite 笔记9 -code first 必须的代码优先
    ServiceStack.OrmLite 笔记8 -还是有用的姿势
    ServiceStack.OrmLite 学习笔记7-复杂点的使用1
    ServiceStack.OrmLite 6 学习笔记 查
    ServiceStack.OrmLite 笔记5 改
    ServiceStack.OrmLite 笔记4 删
    ServiceStack.OrmLite 学习笔记3 建表
    ServiceStack.OrmLite 笔记2 -增
    ServiceStack.OrmLite 笔记
  • 原文地址:https://www.cnblogs.com/top5/p/1699463.html
Copyright © 2011-2022 走看看