Sheridan SSDB Grid 为整列设置值
Sheridan SSDB Grid set value for entire column
我不确定我在这里尝试做的事情是否可行。我有一个 Sheridan SSDB Grid,它绑定到一个数据控件。当我填充数据控件时,网格被填满。
但是,我不得不在填充网格后手动添加一个额外的列以显示不在数据库中的值 table。
为了完成所有这些,我编写了以下代码:
Dim SQL As String
SQL = My_Query
dtaEmployees.DatabaseName = DB_Period_Name$
dtaEmployees.RecordSource = SQL
dtaEmployees.Refresh
dtaEmployees.Recordset.MoveFirst
grdEmployees.Redraw = True
grdEmployees.Columns.Add (4)
不过,我不确定如何填写这个新栏。我有一个全局变量存储我需要的值,但以下代码行中的 none 有效
grdEmployees.Columns(4).Value = My_Variable
grdEmployees.Columns(4).Text = My_Variable
如何为网格中的所有行设置值?
编辑
按照评论中的建议,我修改了我的代码如下。
表单加载:
Dim dbsPeriod As Database
Dim tdfEmployees As TableDef
Dim fldLoop As Field
Set dbsPeriod = OpenDatabase(DB_Period_Name$)
Set tdfEmployees = dbsPeriod.TableDefs!Ledger
AppendDeleteField tdfEmployees, "APPEND", "Location", dbText, 8
grdEmployees.DataSource = tdfEmployees
AppendDeleteField tdfEmployees, "DELETE", "Location"
dbsPeriod.Close
AppendDeleteField
子:
Private Sub AppendDeleteField(tdfTemp As TableDef, strCommand As String, _
strName As String, _
Optional varType, Optional varSize)
With tdfTemp
If .Updatable = False Then
MsgBox "Failed to initialise grid!"
Exit Sub
End If
If strCommand = "APPEND" Then
.Fields.Append .CreateField(strName, varType, varSize)
Else
If strCommand = "DELETE" Then .Fields.Delete strName
End If
End With
End Sub
使用此代码,根本没有数据加载到网格中。
在删除字段之前,您没有将数据加载到 RecordSet
。您需要将数据(使用您的 SELECT
查询)获取到网格可以用作 .DataSource
的数据结构中
TableDef
不是数据结构,它只允许您对数据库 table 本身进行更改,这就是您的代码不返回任何行的原因。
我不确定我在这里尝试做的事情是否可行。我有一个 Sheridan SSDB Grid,它绑定到一个数据控件。当我填充数据控件时,网格被填满。
但是,我不得不在填充网格后手动添加一个额外的列以显示不在数据库中的值 table。
为了完成所有这些,我编写了以下代码:
Dim SQL As String
SQL = My_Query
dtaEmployees.DatabaseName = DB_Period_Name$
dtaEmployees.RecordSource = SQL
dtaEmployees.Refresh
dtaEmployees.Recordset.MoveFirst
grdEmployees.Redraw = True
grdEmployees.Columns.Add (4)
不过,我不确定如何填写这个新栏。我有一个全局变量存储我需要的值,但以下代码行中的 none 有效
grdEmployees.Columns(4).Value = My_Variable
grdEmployees.Columns(4).Text = My_Variable
如何为网格中的所有行设置值?
编辑
按照评论中的建议,我修改了我的代码如下。
表单加载:
Dim dbsPeriod As Database
Dim tdfEmployees As TableDef
Dim fldLoop As Field
Set dbsPeriod = OpenDatabase(DB_Period_Name$)
Set tdfEmployees = dbsPeriod.TableDefs!Ledger
AppendDeleteField tdfEmployees, "APPEND", "Location", dbText, 8
grdEmployees.DataSource = tdfEmployees
AppendDeleteField tdfEmployees, "DELETE", "Location"
dbsPeriod.Close
AppendDeleteField
子:
Private Sub AppendDeleteField(tdfTemp As TableDef, strCommand As String, _
strName As String, _
Optional varType, Optional varSize)
With tdfTemp
If .Updatable = False Then
MsgBox "Failed to initialise grid!"
Exit Sub
End If
If strCommand = "APPEND" Then
.Fields.Append .CreateField(strName, varType, varSize)
Else
If strCommand = "DELETE" Then .Fields.Delete strName
End If
End With
End Sub
使用此代码,根本没有数据加载到网格中。
在删除字段之前,您没有将数据加载到 RecordSet
。您需要将数据(使用您的 SELECT
查询)获取到网格可以用作 .DataSource
TableDef
不是数据结构,它只允许您对数据库 table 本身进行更改,这就是您的代码不返回任何行的原因。