2007-07-26 10:26:50| 分类: Windows Mobile | 标签: |举报 |字号大中小 订阅
在PDA设备上不能直接对DataGrid的单元格进行编辑,那么,如何实现单元格可编辑呢?我们可以用TextBox来模拟单元格,让这个TextBox一开始隐藏起来,当点击DataGrid的单元格的时候,在当前单元格的位置显示TextBox.因此我们必须要先获得当前单元格的坐标,然后显示TextBox在该坐标,并且将当前单元格的内容赋给TextBox,当用户修改了TextBox的内容并且离开该单元格时,TextBox将再次被隐藏,同时,单元格的内容被赋为TextBox的最新内容。按照以上的思路我们可以写如下代码:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlServerCe
Public Class Form5
Public conn As New SqlCeConnection("DataSource=\test.sdf")
Public cmd As SqlCeCommand
Public adapter As New SqlCeDataAdapter
Public LineType As Integer
Private Sql As String
Private isEditMode As Boolean = False '是否处于编辑模式
Private isUpdateMode As Boolean = False '是否处于更新模式
Private editCell As New DataGridCell '编辑的单元格子
Private cellPos As New Rectangle '单元格的位置
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
If isUpdateMode = False Then
'更新模式
If isEditMode = True And DataGrid1.CurrentCell.Equals(editCell) = False Then
'保存当前所在单元格子,因为设置item时候焦点会移出
isUpdateMode = True
DataGrid1.Visible = False
Dim currentcell As New DataGridCell
currentcell = DataGrid1.CurrentCell
DataGrid1.Item(editCell.RowNumber, editCell.ColumnNumber) = TextBox1.Text
DataGrid1.CurrentCell = currentcell
DataGrid1.Visible = True
'开始保存编辑结果到数据库中
'(...)代码略
'结束保存
TextBox1.Visible = False
isUpdateMode = False
isEditMode = False
End If
'编辑模式
editCell = DataGrid1.CurrentCell
cellPos = DataGrid1.GetCellBounds(editCell.RowNumber, editCell.ColumnNumber)
TextBox1.Left = cellPos.Left - 1
TextBox1.Top = cellPos.Top + DataGrid1.Top - 1
TextBox1.Width = cellPos.Width + 2
TextBox1.Height = cellPos.Height + 2
TextBox1.Visible = True
TextBox1.Text = DataGrid1.Item(editCell.RowNumber, editCell.ColumnNumber)
isEditMode = True
End If
End Sub
Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
Cursor.Current = Cursors.Default
conn.Open()
Sql = "select plandate,linename,planweekday from t_plan where userid=1 order by plandate asc"
cmd = New SqlCeCommand(Sql)
cmd.Connection = conn
adapter.SelectCommand = cmd
Dim dataset As New DataSet()
adapter.Fill(dataset, "plan")
dataset.Tables(0).Columns(0).ColumnName = "日期"
dataset.Tables(0).Columns(1).ColumnName = "描述"
dataset.Tables(0).Columns(2).ColumnName = "星期"
Dim tableStyle As DataGridTableStyle
tableStyle = New DataGridTableStyle
tableStyle.MappingName = "plan"
DataGrid1.TableStyles.Clear()
DataGrid1.TableStyles.Add(tableStyle)
DataGrid1.DataSource = dataset.Tables(0)
DataGrid1.TableStyles("plan").GridColumnStyles(0).Width = 80
DataGrid1.TableStyles("plan").GridColumnStyles(1).Width = 70
DataGrid1.TableStyles("plan").GridColumnStyles(2).Width = 54
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End Sub
End Class
效果演示:
同理,我们可以用DataTimePicker来模拟单元格达到日期编辑的效果,效果图如下:
评论