C#利用DataGridView實現資料的快速輸入

來源:互聯網
上載者:User

在做管理軟體時,常常需要表格輸入功能。表格輸入極大地加快了資料輸入,提高了工作效率,當然也提高了軟體的競爭性。筆者最近用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; 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.