我是Vb.net的初学者,所以请相信我的知识:)我正在开发的winform应用程序的格式来自于Excel,用户每天都要输入以下内容:
无件Qty型管分级共计
1- ABC123 - 10.4 -1
2- ABC456 - 10.3 -1
3\x{e76f} ABC789 \\x{e76f}\x{e76f}\x{e76f} 30.8
(空白行)
1\x{e76f} ABC012 \x{e76f} 10.9 \x{e76f}2
2- ABC234 - 10.2 -2-2
3- ABC765 - 10.4 -2
4\x{e76f} ABC876 \x{e76f} 10.8 \x{e76f}2\x{e76f} 42.3
(空白行)
1- ABC567 - 10.6 -2-3
总计: 83.7
在excel中,有如下公式:
编号和管ID都是自动填充的。
数据由用户输入。用户会故意跳过一行(空白)放进“片”,“管”会自动增加1。同时,“小计”也会自动计算。
老实说,我什么也没试过,因为我对从哪里开始毫无头绪!这绝对不是使用Datagridview >_<输入数据的常用方式。
我的问题是,这与Datagridview是可行的吗?用户可以用这种方式使用空行和小计进行输入吗?若否,是否有其他选择?谢谢!
发布于 2019-09-03 01:40:43
这只是一个示例(没有验证输入),您必须有一个DataGridView (myDGV),它有五个列(No、five、Qty、Tube和SubTotal)、2个文本框(txtPiece、txtQty)和2个按钮(btnAdd,btnSkip):
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
myDGV.AllowUserToAddRows = False
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim myNextNo As Integer = 0
Dim myNextTube As Integer = 0
If myDGV.RowCount = 0 Then
myDGV.Rows.Add(1, txtPiece.Text, txtQty.Text, 1, "")
Else
Dim myCnt As Integer = myDGV.RowCount
If myDGV.Item(0, myCnt - 1).Value Is "" Then
myNextNo = 1
myNextTube = Integer.Parse(myDGV.Item(3, myCnt - 2).Value.ToString) + 1
Else
myNextNo = Integer.Parse(myDGV.Item(0, myCnt - 1).Value.ToString) + 1
myNextTube = Integer.Parse(myDGV.Item(3, myCnt - 1).Value.ToString)
End If
myDGV.Rows.Add(myNextNo, txtPiece.Text, txtQty.Text, myNextTube, "")
End If
End Sub
Private Sub btnSkip_Click(sender As Object, e As EventArgs) Handles btnSkip.Click
If myDGV.RowCount = 0 Then
MessageBox.Show("Can't skip, No Data")
Exit Sub
End If
If myDGV.Item(0, myDGV.RowCount - 1).Value Is "" Then
MessageBox.Show("Can't More skip, No Data")
Exit Sub
End If
Dim mySub As Long = 0
For myCnt As Integer = myDGV.RowCount To 1 Step -1
If myDGV.Item(0, myCnt - 1).Value Is "" Then
Exit For
End If
mySub += Long.Parse(myDGV.Item(2, myCnt - 1).Value.ToString)
Next
myDGV.Item(4, myDGV.RowCount - 1).Value = mySub
myDGV.Rows.Add("", "", "", "", "")
End Sub如果您想获得总计,可以将btnSkip_Click过程更改如下:
Private Sub btnSkip_Click(sender As Object, e As EventArgs) Handles btnSkip.Click
If myDGV.RowCount = 0 Then
MessageBox.Show("Can't skip, No Data")
Exit Sub
End If
If myDGV.Item(0, myDGV.RowCount - 1).Value Is "" Then
MessageBox.Show("Can't More skip, No Data")
Exit Sub
End If
Dim mySub As Long = 0
Dim myGrand As Long = 0
Dim myStts As Boolean = False
For myCnt As Integer = myDGV.RowCount To 1 Step -1
If myDGV.Item(0, myCnt - 1).Value Is "" Then
myStts = True
End If
Dim mySubTtl As Long = 0
If myStts = False Then mySub += Long.Parse(myDGV.Item(2, myCnt - 1).Value.ToString)
Long.TryParse(myDGV.Item(2, myCnt - 1).Value.ToString, mySubTtl)
myGrand += mySubTtl
Next
myDGV.Item(4, myDGV.RowCount - 1).Value = mySub
If myDGV.ColumnCount = 6 Then myDGV.Columns.Remove(myDGV.Columns(5))
myDGV.Columns.Add("GrandTotal", "Grand Total")
myDGV.Item(5, myDGV.RowCount - 1).Value = myGrand
myDGV.Rows.Add("", "", "", "", "")
End Subhttps://stackoverflow.com/questions/57755169
复制相似问题