首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Datagridview中使用复选框列重复一个过程

在Datagridview中使用复选框列重复一个过程
EN

Stack Overflow用户
提问于 2016-09-13 08:57:07
回答 2查看 119关注 0票数 2

下午好。

我有一个问题,我不知道它是已经完成还是新的。在datagridview中,是否可以根据选中的列多次重复相同的过程?

下面是这个场景

在我有一个数据视图之前,它有一个名为IDNameCash的3列,每次我单击一行时,数据将以3个标签传送,然后我将在文本框中放置一个数字,在将现金保存到数据库中之前计算它。

现在,这是我的目标,我将在datagridview开始时在checkboxcolumn旁边添加一个ID,下面是下一部分,假设我将检查2行。他们两个人的程序是否可能是一样的呢?(在一个接一个地保存到数据库之前,将计算转移到标签上?)

这就是我到目前为止尝试过的

这是在标签中传输数据视图数据的代码(在单元格点击下)

代码语言:javascript
运行
复制
  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()

以下是计算部分(在私有标准下)

代码语言:javascript
运行
复制
 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

以下是保存部分或传输到数据库(单击按钮)

代码语言:javascript
运行
复制
  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为未来的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 01:15:34

仔细阅读我放在这段代码中的Comments,这样您就可以了解发生了什么。

我已经在这里包含了CellClick的代码(我用CellValueChanged代替了它)和保存的代码--只保存选中的行

您可以在其中一个SaveCheckedRecords()中调用button_Clicks

我还包括一个计算单位价格总额的奖金代码。

代码语言:javascript
运行
复制
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

如果有错误(因为我还没有测试代码)或您仍然不明白的事情,请在这里注释它。

票数 1
EN

Stack Overflow用户

发布于 2016-09-14 03:53:23

试着用循环。

示例

代码语言:javascript
运行
复制
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中的多个复选框后,使用一个按钮调用此函数。

-最新消息

代码语言:javascript
运行
复制
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

也许就是这个?试一试,先生

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39465981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档