【原创】PDA 实现DataGrid可编辑

PDA 实现DataGrid可编辑

通过继承 DataGrid 扩展实现

 

对ISupportInitialize 空实现,如没有,会出现异常。

 

在PDA设备上不能直接对DataGrid的单元格进行编辑,那么,如何实现单元格可编辑呢?我们可以用TextBox来模拟单元格,让这个TextBox一开始隐藏起来,当点击DataGrid的单元格的时候,在当前单元格的位置显示TextBox.因此我们必须要先获得当前单元格的坐标,然后显示TextBox在该坐标,并且将当前单元格的内容赋给TextBox,当用户修改了TextBox的内容并且离开该单元格时,TextBox将再次被隐藏,同时,单元格的内容被赋为TextBox的最新内容。按照以上的思路我们可以写如下代码:

 1 using System;
 2 using System.Drawing;
 3 using System.Windows.Forms;
 4 using System.ComponentModel;
 5 
 6 namespace SmartDeviceProject1
 7 {
 8     public class datagridEx :DataGrid,ISupportInitialize
 9     {
10         DataGridCell editcell = new DataGridCell();
11         Rectangle cellpos = new Rectangle();
12         TextBox txtedit = new TextBox();
13         bool isUpdateMode = false;
14         bool isEditMode = false;
15 
16         public datagridEx()
17         {
18             this.Controls.Add(txtedit);
19             txtedit.Visible = false;
20             txtedit.BringToFront();
21             txtedit.Text = "grn";
22         }
23         protected override void OnCurrentCellChanged(EventArgs e)
24         {
25             if (isUpdateMode)
26             {
27                 base.OnCurrentCellChanged(e);
28                 return;
29             }
30             DataGridCell currentcell = this.CurrentCell;
31             if (isEditMode && !this.CurrentCell.Equals(editcell))
32             {
33                 isUpdateMode = true;
34                 this[editcell.RowNumber, editcell.ColumnNumber] = txtedit.Text;
35                 this.CurrentCell = currentcell;
36                 this.Visible = true;
37                 txtedit.Visible = false;
38                 isUpdateMode = false;
39                 isEditMode = false;
40             }
41             editcell = this.CurrentCell;
42             cellpos = this.GetCellBounds(editcell.RowNumber, editcell.ColumnNumber);
43             txtedit.Left = cellpos.Left  - 1;
44             txtedit.Top = cellpos.Top  - 1;
45             txtedit.Width = cellpos.Width + 2;
46             txtedit.Height = cellpos.Height + 2;
47 
48             txtedit.Visible = true;            
49             txtedit.Text = this[editcell.RowNumber, editcell.ColumnNumber].ToString();
50 
51             txtedit.BringToFront();
52             txtedit.Focus();
53             txtedit.SelectAll();
54             isEditMode = true;
55 
56             base.OnCurrentCellChanged(e);
57         }
58 
59         #region ISupportInitialize接口实现
60         public void BeginInit()
61         {            
62         }
63         public void EndInit()
64         {
65         }
66         #endregion
67 
68     }   
69 }

 

当然,还可以增加回车跳转到下一单元格。

posted on 2012-06-13 17:27  LeeWenjie  阅读(726)  评论(0编辑  收藏  举报

导航