下午好。
我有一个问题,我不知道它是已经完成还是新的。在datagridview中,是否可以根据选中的列多次重复相同的过程?
下面是这个场景
在我有一个数据视图之前,它有一个名为ID
、Name
和Cash
的3列,每次我单击一行时,数据将以3个标签传送,然后我将在文本框中放置一个数字,在将现金保存到数据库中之前计算它。
现在,这是我的目标,我将在datagridview开始时在checkboxcolumn
旁边添加一个ID
,下面是下一部分,假设我将检查2行。他们两个人的程序是否可能是一样的呢?(在一个接一个地保存到数据库之前,将计算转移到标签上?)
这就是我到目前为止尝试过的
这是在标签中传输数据视图数据的代码(在单元格点击下)
Dim i As Integer
i = DataGridView1.CurrentRow.Index
Label2.Text = DataGridView1.Item("ItemCode", i).Value
Label3.Text = DataGridView1.Item("Description", i).Value
Label4.Text = DataGridView1.Item("ReflectedQty", i).Value
Label5.Text = DataGridView1.Item("UOM", i).Value
Label6.Text = DataGridView1.Item("UnitPrice", i).Value
Label7.Text = DataGridView1.Item("Total", i).Value
Label8.Text = DataGridView1.Item("Remarks", i).Value
Dim cell As DataGridViewCheckBoxCell = DataGridView1.Rows(e.RowIndex).Cells(0)
DataGridViewCheckBoxColumn_Uncheck()
cell.Value = True
standard()
以下是计算部分(在私有标准下)
Dim con As MySqlConnection = New MySqlConnection("server=192.168.2.87;userid=root;password=****;database=inventory")
Dim cmd As MySqlCommand = New MySqlCommand("select StandardUOM,QtyPerUoM from item_master_list where ItemCode = '" & Label2.Text & "'", con)
Dim reader As MySqlDataReader
con.Open()
reader = cmd.ExecuteReader
While reader.Read
Label9.Text = reader.GetString("StandardUOM")
Label10.Text = reader.GetString("QtyPerUoM")
End While
以下是保存部分或传输到数据库(单击按钮)
DataGridView1.Columns.RemoveAt(0)
Dim con1 As MySqlConnection = New MySqlConnection("datasource=192.168.2.87;database=inventory;userid=root;password=*****")
Dim cmdinsert As MySqlCommand = New MySqlCommand("insert into receiving (RINo,PONo,ItemCode,Description,QtyPack,PackUoM,UnitPrice,Total,Remarks,ExpiryDate,QtyStan,StanUoM,PCS) values ('" & frm_Add_Receiving_Items.TextBox1.Text & "','" & Label1.Text & "','" & Label2.Text & "','" & Label3.Text & "','" & Label11.Text & "','" & Label5.Text & "','" & Label6.Text & "','" & Label7.Text & "','" & Label8.Text & "','" & DateTime.Now.ToString("yyyy-MM-dd") & "','" & Label12.Text & "','" & Label9.Text & "','" & Label10.Text & "')", con1)
con1.Open()
cmdinsert.ExecuteNonQuery()
con1.Close()
下面是代码的输出
我希望我能澄清我的问题。
TYSM为未来的帮助
发布于 2016-09-15 01:15:34
仔细阅读我放在这段代码中的Comments
,这样您就可以了解发生了什么。
我已经在这里包含了CellClick
的代码(我用CellValueChanged
代替了它)和保存的代码--只保存选中的行。
您可以在其中一个SaveCheckedRecords()
中调用button_Clicks
。
我还包括一个计算单位价格总额的奖金代码。
Sub DataGridView1_CurrentCellDirtyStateChanged( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles DataGridView1.CurrentCellDirtyStateChanged
If DataGridView1.IsCurrentCellDirty Then
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellValueChanged
If e.ColumnIndex = 0 Then 'SO THAT CHECKBOX COLUMN WILL ONLY TRIGGER THE CHANGES
'THIS WILL HOLD THE VALUE OF THE CHECKBOX (TRUE OR FALSE)
Dim currCheckCell As DataGridViewCheckBoxCell = _
CType(DataGridView1.Rows(e.RowIndex).Cells(0), DataGridViewCheckBoxCell)
'LABEL CHANGES BASED ON THE ROW OF THE CHECKBOX
'IF-CONDITION SO THAT LABEL CHANGES WILL HAPPEN ONLY IF THE CHECKBOX IS CHECKED
If currCheckCell.Value = True Then
Dim i As Integer = e.RowIndex
Label2.Text = DataGridView1.Item("ItemCode", i).Value
Label3.Text = DataGridView1.Item("Description", i).Value
Label4.Text = DataGridView1.Item("ReflectedQty", i).Value
Label5.Text = DataGridView1.Item("UOM", i).Value
Label6.Text = DataGridView1.Item("UnitPrice", i).Value
Label7.Text = DataGridView1.Item("Total", i).Value
Label8.Text = DataGridView1.Item("Remarks", i).Value
End If
Standard()
Dim totalstr As Double = 0
For Each drow As DataGridViewRow In DataGridView1.Rows
Dim checkCell As DataGridViewCheckBoxCell = _
CType(drow.Cells(0), DataGridViewCheckBoxCell)
If checkCell.Value = True Then
totalstr += Val(drow.Cells(5).Value)
End If
Next
lblTotal.Text = FormatNumber(totalstr, 2)
End If
End Sub
Public Sub SaveCheckedRecords()
DataGridView1.Columns.RemoveAt(0)
Dim con1 As MySqlConnection = New MySqlConnection("datasource=192.168.2.87;database=inventory;userid=root;password=*****")
Dim cmdinsert As MySqlCommand = New SqlCommand
For Each drow As DataGridViewRow In DataGridView1.Rows
Dim checkCell As DataGridViewCheckBoxCell = _
CType(drow.Cells(0), DataGridViewCheckBoxCell)
If checkCell.Value = True Then 'AGAIN, TO CHECK IF THE COLUMN IS CHECKED
'CELL INDEXES ARE ASSUMED SINCE YOU DIDN'T SPECIFIED IT ALSO
'YOU ARE THE ONE WHO KNOWS THE RIGHT INDECES SO CHANGE THEM IF THE INDECES ARE WRONG
Dim ItemCode As String = drow.Cells(1).Value
Dim Desc As String = drow.Cells(2).Value
Dim ReflectedQty As String = drow.Cells(3).Value
Dim UOM As String = drow.Cells(4).Value
Dim UnitPrice As Double = Val(drow.Cells(5).Value)
Dim Total As Double = Val(drow.Cells(6).Value)
Dim Remarks As String = drow.Cells(7).Value
'NOW USE ALL OF THE VARIABLES ABOVE IN YOUR INSERT QUERY
'CMDINSERT PART HERE SINCE I DON'T KNOW SOME OF YOUR LABELS
'LIKE LABEL11 SO IT'S UP TO YOU TO CREATE THE COMMAND WHICH IS EASY
con1.Open()
cmdinsert.ExecuteNonQuery()
con1.Close()
End If
Next
End Sub
如果有错误(因为我还没有测试代码)或您仍然不明白的事情,请在这里注释它。
发布于 2016-09-14 03:53:23
试着用循环。
示例
for each row as datagridviewrow in dg.rows
if row.cell(NameOfChckbox).value = 'True' then
'Transfer dg data to to label
'insert your computation/call it
'save to database
end if
next
希望这是你想要的。如果我的回答中遗漏了什么或者不清楚,只需告诉我:)
-建议
在我的回答中有一些建议。这不适合在单元格点击。因为用户有时会犯错误,比如错误,单击或在单击之前进行思考,所以我建议在单击dg中的多个复选框后,使用一个按钮调用此函数。
-最新消息
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
for each row as datagridviewrow in dg.rows
if row.cell("NameOfChckboxCell").value = "True" then
label1.text = row.cells("ItemCode").value
etc . . .
then call your standard sub?
standard()
then your save here. . .
end if
End Sub
也许就是这个?试一试,先生
https://stackoverflow.com/questions/39465981
复制相似问题