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;?
}?
?
總結
以上是生活随笔為你收集整理的C#利用DataGridView实现数据的快速输入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注销微软账户会怎样?
- 下一篇: C# + .net下使用serialPo