C#利用DataGridView实现数据的快速输入

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

?C#利用DataGridView实现数据的快速输入

2008-03-21 15:23在做管理软件时,常常需要表格输入功能。表格输入极大地加快了数据输入,提高了工作效率,当然也提高了软件的竞争性。笔者最近用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, Day);
}


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 == t

his.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;
}


相关文档
最新文档