【发布时间】:2015-08-24 15:08:51
【问题描述】:
我有一个程序(用 VB.NET 编写)将数据写入 SQL Server 数据库。我知道编写语句来访问该数据并将其呈现给用户。
我卡住的地方是我有一个DataGridView 设置,第一列是用户支付的账单列表。我用
SELECT DISTINCT [PayTo]
FROM Main_Bills
填充此列并且它可以工作。
接下来的列是每个月,最后一列是迄今为止支付的总额。我不确定如何填充剩余的列并让它们显示,即使它们是空的。我想要完成的是:
- 显示所有列,即使它们不包含数据。
- 在数据库中搜索当月支付的每笔账单,并将其汇总为相应的账单。
- 用当年每笔账单支付的总金额更新最后一列。
如果数据库包含示例:
Bill Paid To Date Amount
----------------------------------
Electric Company 8/20/15 100.00
Electric Company 8/21/15 50.00
Water Company 8/15/15 25.00
因此,当前设置仅在第一列中显示电力公司一次,这是我想要的以及水务公司。我需要做的是基于年份(这样它只显示当年支付的账单)。我需要将 2 笔电费加在一起,并在 8 月列中显示第 1 列中的 Electric company 项目。然后与水相同。显然,系统中的账单会比这个多。
我希望这一切都有意义。代码部分如下:
Sub SummaryTab_Fill()
Try
con = New SqlConnection(conString)
cmd = New SqlCommand("SELECT DISTINCT [PayTo] FROM Main_Bills", con)
con.Open()
reader = cmd.ExecuteReader()
table = New DataTable
table.Load(reader)
DGVBillSum.AutoGenerateColumns = True
DGVBillSum.RowHeadersVisible = False
DGVBillSum.DataSource = table
DGVBillSum.ColumnCount = 14
DGVBillSum.Columns(0).Name = "Paid To"
DGVBillSum.Columns(1).Name = "January"
DGVBillSum.Columns(2).Name = "February"
DGVBillSum.Columns(3).Name = "March"
DGVBillSum.Columns(4).Name = "April"
DGVBillSum.Columns(5).Name = "May"
DGVBillSum.Columns(6).Name = "June"
DGVBillSum.Columns(7).Name = "July"
DGVBillSum.Columns(8).Name = "August"
DGVBillSum.Columns(9).Name = "September"
DGVBillSum.Columns(10).Name = "October"
DGVBillSum.Columns(11).Name = "November"
DGVBillSum.Columns(12).Name = "December"
DGVBillSum.Columns(13).Name = "Total"
DGVBillSum.Sort(DGVBillSum.Columns(0), ComponentModel.ListSortDirection.Ascending)
DGVBillSum.Refresh()
con.Close()
Catch ex As Exception
'I need to add my catch statement
End Try
【问题讨论】:
-
您可能想要做的是在支付给列的账单上选择不同的选项。然后遍历每一行,对支付的账单进行选择,以获取每家公司的所有行。然后将总计添加到每个月。并将其放在临时表或另一个表中,然后在您的网格视图中选择并显示这些结果
-
我原本打算创建另一个表,并让一个表来填充我的第一列,然后第二列来处理数学部分,但我认为这会让人感到困惑。我对编写 SQL 语句和 VB.NET 还是很陌生。这就是为什么我要编写一个家庭使用的收入和账单计划,以扩展我已经学到的知识并扩展到我们在课堂上没有涵盖的领域。阅读您的评论后,我想我应该首先将结果过滤到当年支付的所有账单。然后用VB对表格的结果进行过滤?
标签: sql sql-server vb.net