C#利用DataGridView实现数据的快速输入
来源:互联网 发布:java 包名 编辑:程序博客网 时间:2024/05/16 01:37
在做管理软件时,常常需要表格输入功能。表格输入极大地加快了数据输入,提高了工作效率,当然也提高了软件的竞争性。笔者最近用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;
}
- C#利用DataGridView实现数据的快速输入
- C#利用DataGridView实现数据的快速输入
- 利用DataGridView及Excel实现数据的导入导出备份
- 在Datagridview控件利用下拉菜单进行枚举数据输入
- C# DataGridView 代码实现选中一行数据
- 如何在C#中利用DataGridView控件编辑数据
- 如何在C#中利用DataGridView控件编辑数据
- C#中DataGridView实现某一列只能输入数字
- c# 实现DataGridView中的单元格只能输入数字和点
- C#中DataGridView实现某一列只能输入数字
- 通过反射快速实现DataGridView数据的添加,获取及序列化
- 如何利用s3c2440的gpio实现数据输入和输出
- C#中DataGridView控件的数据绑定
- C#中DataGridView的数据批量更新
- C#如何实现DataGridView到DataGridView的拖拽
- 利用NSUserDefaults实现小型数据的快速存取
- 利用NSUserDefaults实现小型数据的快速存取
- C# datagridView数据插入
- 讲故事谈.NET委托:一个C#睡前故事
- 【转】如何实现iframe(嵌入式帧)的自适应高度
- Mapinfo到Arc/Info数据转换方法的比较
- 爸爸给4岁女儿的遗书
- 繁华的忧伤
- C#利用DataGridView实现数据的快速输入
- AA制夫妻:分钱还是分感情
- 数据库"远程"连接
- 春的感怀 原创
- 屏幕抓屏(包括活动窗口,指定区域及全屏等)
- 最后一滴泪
- 100个对不起
- 一瓶牛奶和一张报纸引发的 “ 委托 ” 事件
- Struts运行流程解释