/*定义单据表*/
create table bd_bill(
bbautoid int identity(1,1) primary key, --约束
bbtype varchar(10), --类型
bbbtname varchar(20), --表名
bbbttype varchar(20), --类型
bbname varchar(20), --单据名
bbcolumnid int, --列ID,和bd_table(btautoid)对应
bbcolumncaption varchar(20), --列显示名
bbcolumnname varchar(20), --列名
bbcolumnwidth smallint, --显示宽度
bbissum bit, --是否求和列
bbissumby bit, --是否求和依据列
bbisshow bit,
bbmemo varchar(20), --备注
bbcolumnobj varchar(20), --对象
bbcolumnref varchar(20), --参照
bbshoworder smallint --顺序
)
go
接下来就是要做个事情,把表格控件(datagrid)重写,添加一个事件
Dim _ConnString As String = ""
Public Property ConnString() As String
Get
Return _ConnString
End Get
Set(ByVal Value As String)
_ConnString = Value
End Set
End Property
#Region "设置表格格式"
Public Overridable Overloads Function WriteHeader(ByVal dview As DataView) As Int16
Dim gdStyle As New DataGridTableStyle
Dim ReturnValue As Int16 = 0
Dim row As DataRowView
Dim gdcolumn As DataGridTextBoxColumn
Dim rCount As Integer = dview.Count
While ReturnValue <= rCount - 1
row = dview.Item(ReturnValue)
gdcolumn = New DataGridTextBoxColumn
gdcolumn.Width = row("bdcolumnwidth")
gdcolumn.MappingName = row("btcolumnname")
gdcolumn.HeaderText = row("bdcolumnname")
gdStyle.GridColumnStyles.Add(gdcolumn)
ReturnValue += 1
End While
MyBase.TableStyles.Clear()
MyBase.TableStyles.Add(gdStyle)
Return (ReturnValue)
End Function
Public Overridable Overloads Function WriteHeader(ByVal value As String) As Int16
Dim ReturnValue As Int16 = 0
Dim sqlcn As New SqlConnection(_ConnString)
Dim sqlcmd As New SqlCommand(value, sqlcn)
Dim gdstyle As New DataGridTableStyle
Dim gdcolumn As DataGridTextBoxColumn
Dim sqlrd As SqlDataReader
Try
sqlcn.Open()
sqlrd = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection)
While sqlrd.Read
gdcolumn = New DataGridTextBoxColumn
gdcolumn.Width = sqlrd.Item("bbcolumnwidth")
gdcolumn.MappingName = sqlrd.Item("bbcolumnname")
gdcolumn.HeaderText = sqlrd.Item("bbcolumncaption")
gdstyle.GridColumnStyles.Add(gdcolumn)
ReturnValue += 1
End While
MyBase.TableStyles.Clear()
MyBase.TableStyles.Add(gdstyle)
Catch ex As Exception
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK)
End Try
sqlcmd.Dispose()
sqlcn.Dispose()
Return (ReturnValue)
End Function
Public Overridable Overloads Function WriteHeader(ByVal cnString As String, ByVal Fstring As String) As Int16
Dim ReturnValue As Int16 = 0
Dim olecn As New OleDbConnection(cnString)
Dim olecmd As New OleDbCommand(Fstring, olecn)
Dim olerd As OleDbDataReader
Dim gdstyle As New DataGridTableStyle
Dim gdcolumn As DataGridTextBoxColumn
Try
olecn.Open()
olerd = olecmd.ExecuteReader(CommandBehavior.CloseConnection)
While olerd.Read()
gdcolumn = New DataGridTextBoxColumn
gdcolumn.Width = olerd.Item("bdcolumnwidth")
gdcolumn.MappingName = olerd.Item("btcolumnname")
gdcolumn.HeaderText = olerd.Item("bdcolumnname")
gdstyle.GridColumnStyles.Add(gdcolumn)
ReturnValue += 1
End While
MyBase.TableStyles.Clear()
MyBase.TableStyles.Add(gdstyle)
Catch ex As Exception
End Try
olecmd.Dispose()
olecn.Dispose()
Return (ReturnValue)
End Function
#End Region
由于预先定义的时候考虑到两种设置,一种是使用服务器设置,一种是使用客户端设置,所以会有oledb
这样在做的时候就省力多了,唯一要增加的工作是要在上面定义的表中增加相应的行,然后通过一个select 语句传递给function