从vb.net winform应用程序中的数据网格视图编辑后没有拍摄所有图像

时间:2014-01-22 10:45:56

标签: vb.net winforms datagridview

我正在处理Windows窗体应用程序。

在单元格内容中单击我编写的代码如下:

If e.ColumnIndex = 4 Then
            Dim OFDLogo As New OpenFileDialog()
            OFDLogo.Filter = "JPEG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp"
            If OFDLogo.ShowDialog() = DialogResult.OK Then
                gv.Rows(e.RowIndex).Cells(4).Value = Image.FromFile(OFDLogo.FileName)
            End If
        End If

并保存按钮我写了这样的代码:

Dim cmpny As String = "Delete from CompanyMaster_tbl"
        Exetransaction(cmpny)
    For i As Integer = 0 To gv.RowCount - 2
     sqlInsertT2 = "Insert Into DepartmentMaster_tbl(dtname,dtphone,dtEmail,Cid) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(1).Value) + "','" + gv.Rows(i).Cells(2).Value + "','" + gv.Rows(i).Cells(3).Value + "'," & Ccid & ");"
                    Exetransaction(sqlInsertT2)
                    Dim departmnt As String = gv.Rows(i).Cells(1).Value

                    Dim departid As Integer = RecordID("dtId", "DepartmentMaster_tbl", "dtName", departmnt)
                    Dim sql As String

                    '----------------------------------

                    Dim image As Image = TryCast(gv.Rows(i).Cells(4).Value, Image)
                    If image IsNot Nothing Then
                        Dim ms As New MemoryStream()
                        image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
                        Dim imagedata As Byte() = ms.ToArray()
                        sql = "update DepartmentMaster_tbl set empimage=@photo where dtId='" & departid & "'"
                        Dim cmd As New SqlCommand(sql, con.connect)
                        cmd.Parameters.Add("@photo", SqlDbType.Image)
                        cmd.Parameters("@photo").Value = imagedata
                        cmd.ExecuteNonQuery()
                        con.disconnect()
                    End If
     Next

在第一次我能够保存所有图像形成数据网格视图..但我再次加载相同的页面,我尝试编辑一个图像,之后再次尝试从数据网格视图保存所有图像..但是这个时间只保存编辑过的图像.i意思是(那段时间这段代码不能正常工作)

 Dim image As Image = TryCast(gv.Rows(i).Cells(4).Value, Image)

在单元格内容中点击我正在使用row_index ..这就是为什么会发生

1 个答案:

答案 0 :(得分:0)

check this solution     

     Sub refreshgrid()

                Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter)
                adapter = New SqlDataAdapter("select c.cid,c.CompanyName,d.dtId,d.dtName as Department,d.dtPhone as Phone,d.dtEmail as Email,d.empimage,0 as flag from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId order by cid", con.connect)

                dt1 = New DataTable
                bSource = New BindingSource
                adapter.Fill(dt1) 'Filling dt with the information from the DB
                bSource.DataSource = dt1
                gv.DataSource = bSource
                gv.Columns("cid").Visible = False
                gv.Columns("dtId").Visible = False
                Dim img As New DataGridViewImageColumn
                img.HeaderText = "Image"
                gv.Columns.Insert(6, img)

                For i As Integer = 0 To gv.Rows.Count - 1
                    gv.Rows(i).Cells(6).Value = gv.Rows(i).Cells(7).Value
                Next
                gv.Columns("empimage").Visible = False

                For i As Integer = 0 To gv.Rows.Count - 2
                    If Not IsDBNull(gv.Rows(i).Cells(6).Value) Then
                        gv.Rows(i).Height = 75
                        Dim column As DataGridViewColumn = gv.Columns(6)
                        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                    End If
                Next


                GenerateUniqueData(1)
            End Sub
            Private Sub btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdate.Click
        adapter = New SqlDataAdapter()

        Dim cid As Integer
        Dim dtid As Integer
        Dim cmpname As String
        Dim dtname As String
        Dim dtPhone As String
        Dim dtEmail As String
        Dim dtimage As Image


        For i As Integer = 0 To gv.RowCount - 2
            ' Dim rv = DirectCast(bSource.Current, DataRowView)
            If (gv.Rows(i).Cells(8).Value = 1) Then



                Dim rv = DirectCast(gv.Rows(i).DataBoundItem, DataRowView)
                cid = rv.Row.Field(Of Integer)("Cid")

                dtid = rv.Row.Field(Of Integer)("dtId")
                cmpname = rv.Row.Field(Of String)("CompanyName")
                dtname = rv.Row.Field(Of String)("Department")
                dtPhone = rv.Row.Field(Of String)("Phone")
                dtEmail = rv.Row.Field(Of String)("Email")

                'Using ms As New MemoryStream(rv.Row.Field(Of Byte())("empimage"))
                '    dtimage = New Bitmap(ms)
                'End Using

                adapter.UpdateCommand = New SqlCommand("UPDATE CompanyMaster_tbl SET CompanyName = @CompanyName", con.connect)
                'this code for updating image also..
                adapter.UpdateCommand = New SqlCommand("update DepartmentMaster_tbl set dtName = @dtName,dtPhone = @dtPhone,dtEmail = @dtEmail,empimage=@dtimage  where dtId=@dtid", con.connect)
                ' adapter.UpdateCommand = New SqlCommand("update DepartmentMaster_tbl set dtName = @dtName,dtPhone = @dtPhone,dtEmail = @dtEmail where dtId=@dtid", con.connect)
                adapter.UpdateCommand.Parameters.AddWithValue("@Cid", cid)
                adapter.UpdateCommand.Parameters.AddWithValue("@CompanyName", cmpname)
                adapter.UpdateCommand.Parameters.AddWithValue("@dtId", dtid)
                adapter.UpdateCommand.Parameters.AddWithValue("@dtName", dtname)
                adapter.UpdateCommand.Parameters.AddWithValue("@dtPhone", dtPhone)
                adapter.UpdateCommand.Parameters.AddWithValue("@dtEmail", dtEmail)

                'Dim md As New MemoryStream()
                'dtimage.Save(md, System.Drawing.Imaging.ImageFormat.Gif)

                ' Dim imagedata As Byte() = md.ToArray()
                'Dim md As New MemoryStream()
                '' Save to memory using the Jpeg format
                'dtimage.Save(md, ImageFormat.Gif)

                ' read to end
                'Dim bmpBytes As Byte() = md.GetBuffer()

                ' Dim image As Byte() = System.IO.File.ReadAllBytes()
                Dim image As Image = TryCast(gv.Rows(i).Cells(6).Value, Image)
                If image IsNot Nothing Then
                    Dim ms As New MemoryStream()
                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
                    Dim imagedata As Byte() = ms.ToArray()
                    adapter.UpdateCommand.Parameters.AddWithValue("@dtimage", imagedata)
                End If


                'adapter.UpdateCommand.Parameters.AddWithValue("@dtimage", dtimage)
                adapter.UpdateCommand.ExecuteNonQuery()
            End If
        Next
    End Sub

            Private Sub btnclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclose.Click
                Me.Close()
            End Sub

            Private Sub gv_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gv.CellContentClick
                If e.ColumnIndex = 6 Then
                    Dim OFDLogo As New OpenFileDialog()
                    OFDLogo.Filter = "JPEG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp"
                    If OFDLogo.ShowDialog() = DialogResult.OK Then
                        gv.Rows(e.RowIndex).Cells(6).Value = Image.FromFile(OFDLogo.FileName)
                        gv.Rows(e.RowIndex).Cells(8).Value = "1"
                    End If
                End If
            End Sub
   Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click
        For i As Integer = 0 To gv.RowCount - 2
            If gv.Rows(i).Cells(1).Value.ToString.Length <> 0 AndAlso Not IsDBNull(gv.Rows(i).Cells(1).Value) Then

                If gv.Rows(i).Cells(3).Value.ToString.Length = 0 OrElse IsDBNull(gv.Rows(i).Cells(3).Value) Then
                    MsgBox("Please Enter Department Details")
                    Exit Sub
                End If
            End If
        Next


        'Dim deprt As String = "Delete from DepartmentMaster_tbl"
        'Exetransaction(deprt)
        'Dim cmpny As String = "Delete from CompanyMaster_tbl"
        'Exetransaction(cmpny)


        Dim sqlInsertT1 As String = ""
        Dim sqlInsertT2 As String = ""

        For i As Integer = 0 To gv.RowCount - 2
            ' If gv.Rows(i).Cells(1).Value IsNot System.DBNull.Value AndAlso gv.Rows(i).Cells(1).Value <> "" Then

            If (gv.Rows(i).Cells(8).Value = 1) Then


                If Not IsDBNull(gv.Rows(i).Cells(1).Value) AndAlso gv.Rows(i).Cells(1).Value.ToString.Length <> 0 Then
                    Dim cnt As Integer = RecordPresent("CompanyMaster_tbl", "CompanyName", gv.Rows(i).Cells(1).Value)
                    If cnt = 0 Then
                        sqlInsertT1 = "Insert Into CompanyMaster_tbl(CompanyName) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(1).Value) + "')"
                        Exetransaction(sqlInsertT1)
                        Ccid = RecordID("Cid", "CompanyMaster_tbl", "CompanyName", gv.Rows(i).Cells(1).Value)
                    Else
                        Ccid = RecordID("Cid", "CompanyMaster_tbl", "CompanyName", gv.Rows(i).Cells(1).Value)
                    End If
                End If

                If Not IsDBNull(gv.Rows(i).Cells(3).Value) AndAlso gv.Rows(i).Cells(3).Value.ToString.Length <> 0 Then
                    sqlInsertT2 = "Insert Into DepartmentMaster_tbl(dtname,dtphone,dtEmail,Cid) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(3).Value) + "','" + gv.Rows(i).Cells(4).Value + "','" + gv.Rows(i).Cells(5).Value + "'," & Ccid & ");"
                    Exetransaction(sqlInsertT2)
                    Dim departmnt As String = gv.Rows(i).Cells(3).Value

                    Dim departid As Integer = RecordID("dtId", "DepartmentMaster_tbl", "dtName", departmnt)
                    Dim sql As String

                    '----------------------------------

                    Dim image As Image = TryCast(gv.Rows(i).Cells(6).Value, Image)
                    If image IsNot Nothing Then
                        Dim ms As New MemoryStream()
                        image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
                        Dim imagedata As Byte() = ms.ToArray()
                        sql = "update DepartmentMaster_tbl set empimage=@photo where dtId='" & departid & "'"
                        Dim cmd As New SqlCommand(sql, con.connect)
                        cmd.Parameters.Add("@photo", SqlDbType.Image)
                        cmd.Parameters("@photo").Value = imagedata
                        cmd.ExecuteNonQuery()
                        con.disconnect()
                    End If

                End If

            End If
        Next

        '  refreshgrid()
    End Sub