我在代码中创建了一个 devexpress 网格,列定义如下 我收到错误(见下文) 抱歉,如果代码片段有点长,想展示我是如何完成任务的!
'Expense details
FrmExpenses.GrdExpensesDetails.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "PurchasedAtID",
.FieldName = "PurchasedAtID",
.Width = 0,
.UnboundDataType = GetType(String),
.Visible = False})
FrmExpenses.GrdExpensesDetails.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "Purchased At",
.FieldName = "TName",
.Width = 450,
.UnboundDataType = GetType(String),
.Visible = True})
'Expense items
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "PurchasedAtID",
.FieldName = "PurchasedAtID",
.Width = 0,
.UnboundDataType = GetType(String),
.Visible = False})
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "ExpID",
.FieldName = "ExpID",
.Width = 0,
.UnboundDataType = GetType(String),
.Visible = False})
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "Date",
.FieldName = "InvDte",
.Width = 100,
.UnboundDataType = GetType(String),
.Visible = True})
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "InvNo",
.FieldName = "InvNo",
.Width = 100,
.UnboundDataType = GetType(String),
.Visible = True})
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "Amount",
.FieldName = "InvAmt",
.Width = 100,
.UnboundDataType = GetType(String),
.Visible = True})
FrmExpenses.GrdExpensesItems.Columns.Add(New DevExpress.XtraGrid.Columns.GridColumn() With {
.Caption = "%",
.FieldName = "PrjPercentage",
.Width = 100,
.UnboundDataType = GetType(String),
.Visible = True})
现在我定义了“购买地点”声明
Private Function GetExpensesInvoicesDataTable() As DataTable
Dim table As New DataTable With {
.TableName = "ExpensesInvoices"
}
Try
table.Columns.Add("PurchasedAtID", GetType(String)).Caption = "PurchasedAtID"
With FrmExpenses.GrdExpensesDetails.Columns(0)
.OptionsColumn.AllowFocus = False
.OptionsColumn.AllowEdit = False
.OptionsColumn.FixedWidth = True
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center
End With
table.Columns.Add("TName", GetType(String)).Caption = "TName"
With FrmExpenses.GrdExpensesDetails.Columns(1)
.OptionsColumn.AllowFocus = True
.OptionsColumn.AllowEdit = False
.OptionsColumn.FixedWidth = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Default
End With
'Do not show Mileage or Vehicle Expenses
Dim strV As String = "3165054"
Dim strM As String = "3612231422"
'show current year data
Dim strID As String = "2023" 'Format(Now, "yyyy")
Dim rea As OleDbDataReader
con.Open()
'Load
Dim cmd As New OleDb.OleDbCommand("SELECT DISTINCT tblExpenses.PurchasedAtID, tblTradesVendors.TName FROM tblExpenses INNER JOIN tblTradesVendors ON tblExpenses.PurchasedAtID = tblTradesVendors.TradeID WHERE tblExpenses.Yr '" & strID & "' ORDER BY tblTradesVendors.TName", con)
rea = cmd.ExecuteReader
If rea.HasRows Then
While rea.Read()
table.Rows.Add(rea("PurchasedAtID"), rea("TName"))
End While
End If
con.Close()
Return table
Catch ex As Exception
con.Close()
Return table
XtraMessageBox.Show(ex.Message, Application.ProductName & " - GetExpensesInvoicesDataTable Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Err.Clear()
End Try
Return table
End Function
现在我们找到发票的详细信息
Private Function GetExpensesInvoicesRowsDataTable() As DataTable
Dim table As New DataTable With {
.TableName = "ExpensesInvoicesRows"
}
Try
'show current year data
'Dim strID As String = "2023"
table.Columns.Add("PurchasedAtID", GetType(String)).Caption = "PurchasedAtID"
With FrmExpenses.GrdExpensesItems.Columns(0)
.OptionsColumn.AllowFocus = False
.OptionsColumn.AllowEdit = False
.OptionsColumn.FixedWidth = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center
End With
table.Columns.Add("ExpID", GetType(String)).Caption = "ExpID"
With FrmExpenses.GrdExpensesItems.Columns(1)
.OptionsColumn.AllowFocus = False
.OptionsColumn.AllowEdit = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center
End With
table.Columns.Add("InvDte", GetType(String)).Caption = "InvDte"
With FrmExpenses.GrdExpensesItems.Columns(2)
.OptionsColumn.AllowFocus = True
.OptionsColumn.AllowEdit = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Far
End With
table.Columns.Add("InvNo", GetType(String)).Caption = "InvNo"
With FrmExpenses.GrdExpensesItems.Columns(3)
.OptionsColumn.AllowFocus = False
.OptionsColumn.AllowEdit = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Default
End With
table.Columns.Add("InvAmt", GetType(String)).Caption = "InvAmt"
With FrmExpenses.GrdExpensesItems.Columns(4)
.OptionsColumn.AllowFocus = True
.OptionsColumn.AllowEdit = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Far
End With
table.Columns.Add("PrjPercentage", GetType(String)).Caption = "PrjPercentage"
With FrmExpenses.GrdExpensesItems.Columns(5)
.OptionsColumn.AllowFocus = False
.OptionsColumn.AllowEdit = False
.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Default
End With
Dim rea As OleDbDataReader
con.Open()
'Load
Dim cmd As New OleDb.OleDbCommand("SELECT tblExpenses.PurchasedAtID, tblExpenses.ExpID, tblExpenses.InvDte, tblExpenses.InvNo, tblExpenses.InvAmt, tblExpInvItems.PrjPercentage FROM tblExpenses INNER JOIN tblExpInvItems ON tblExpenses.ExpID = tblExpInvItems.ExpID ORDER BY tblExpenses.InvDte DESC", con) 'WHERE tblExpenses.Yr ='" & strID & "'
rea = cmd.ExecuteReader
'Add to the Combo box
If rea.HasRows Then
While rea.Read()
table.Rows.Add(rea("PurchasedAtID"), rea("ExpID"), rea("InvDte"), rea("InvNo"), rea("InvAmt"), rea("PrjPercentage"))
End While
End If
con.Close()
Return table
Catch ex As Exception
con.Close()
Return table
XtraMessageBox.Show(ex.Message, Application.ProductName & " - GetExpensesInvoicesRowsDataTable Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Err.Clear()
End Try
Return table
End Function
现在加载网格
Public Sub BindExpensesGrid()
Try
_DataSet = New DataSet()
_DataSet.Tables.Add(GetExpensesInvoicesDataTable())
_DataSet.Tables.Add(GetExpensesInvoicesRowsDataTable())
Dim keyColumn As DataColumn = _DataSet.Tables("ExpensesInvoices").Columns("PurchasedAtID")
Dim foreignKeyColumn As DataColumn = _DataSet.Tables("ExpensesInvoicesRows").Columns("PurchasedAtID")
_DataSet.Relations.Add("Level1", keyColumn, foreignKeyColumn)
FrmExpenses.GrdExpenses.DataSource = _DataSet.Tables("ExpensesInvoices")
FrmExpenses.GrdExpenses.ForceInitialize()
Catch ex As Exception
con.Close()
XtraMessageBox.Show(ex.Message, Application.ProductName & " - BindExpensesGrid Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Err.Clear()
Finally
FrmExpenses.GrdExpenses.EndUpdate()
End Try
End Sub
我看不出原因? 有人能指出这个问题吗??? 预先感谢
你可能是对的,我的朋友,仍在学习 DevExpress。 但是,暂时如果我使用与 Devcomponents 相同的代码,它可以工作???
'Dim strID As String = "2023"
_DataSet = New DataSet()
FrmExpenses.GrdExpenses.BeginUpdate()
con.Open()
Dim adapter As New OleDbDataAdapter("SELECT DISTINCT
tblExpenses.PurchasedAtID, tblTradesVendors.TName FROM (tblExpenses INNER
JOIN tblExpInvItems ON tblExpenses.ExpID = tblExpInvItems.ExpID) INNER
JOIN tblTradesVendors ON tblExpenses.PurchasedAtID =
tblTradesVendors.TradeID WHERE tblExpInvItems.Yr ='" & strID & "' ORDER BY
tblTradesVendors.TName", con)
adapter.Fill(_DataSet, "ExpensesInvoices")
CType(New OleDbDataAdapter("SELECT tblExpenses.PurchasedAtID, tblExpenses.ExpID, tblExpenses.InvDte, tblExpenses.InvNo, tblExpenses.InvAmt, tblExpInvItems.PrjPercentage FROM tblExpenses INNER JOIN tblExpInvItems ON tblExpenses.ExpID = tblExpInvItems.ExpID ORDER BY tblExpenses.InvDte DESC", con), OleDbDataAdapter).Fill(_DataSet, "ExpensesInvoicesRows")
_DataSet.Relations.Add("Level1",
_DataSet.Tables("ExpensesInvoices").Columns("PurchasedAtID"),
_DataSet.Tables("ExpensesInvoicesRows").Columns("PurchasedAtID"), False)
With FrmExpenses.GrdExpenses
.DataSource = _DataSet
.DataMember = "ExpensesInvoices"
.ForceInitialize()
End With
con.Close()