如何将数据从DataGridView传递到另一个VB.NET

时间:2014-11-14 19:05:16

标签: sql-server vb.net datagridview

让我们说我有一个有两个部分的表格,派对部分(派对图像)和学校部分(学校图像的地方)。每个部分可以存储n个图像(所有图像都在我的SQL Server中的Image_Table中)。

所以这是我的问题。我在每个部分都有一个DataGridView来显示图像和两个填充方法:

Me.Image_TableTableAdapter.FillByPartyImages(Me.CAR_AuxDataSet.Image_Table, partyId)

和a:

Me.Image_TableTableAdapter.FillBySchoolImages(Me.CAR_AuxDataSet.Image_Table, schoolId)

两个dgv与同一个表适配器相关联,因此,当执行一个填充方法时,填充两个dgv。

我尝试执行第一个填充方法(用派对图像填充dgvPartyImages和dgvSchoolImages),将数据从dgvPartyImages保存到dgvAux,执行第二个方法(用学校图像填充dgvPartyImages和dgvSchoolImages)然后检索数据从de dgvAux到dgvPartyImages,但我不能让它工作

以下是代码:

Dim dgvAuxReq As New DataGridView

Me.Image_TableTableAdapter.FillByPartyImages(Me.CAR_AuxDataSet.Image_Table, partyId)
dgvAux.DataSource = dgvPartyImages.DataSource
Me.Image_TableTableAdapter.FillBySchoolImages(Me.CAR_AuxDataSet.Image_Table, schoolId)
dgvPartyImages.DataSource = dgvAux.DataSource
'This code does not work

到目前为止,解决方案是用

填充两个dgv
Me.Image_TableTableAdapter.Fill(Me.CAR_AuxDataSet.Image_Table)

然后按partyId和schoolId过滤:

Dim bsPary As New BindingSource
Dim bsSchool As New BindingSource

bsParty.DataSource = dgvPartyImages.DataSource
bsParty.Filter = "Id_Party = " & partyId.ToString
dgvPartyImages.DataSource = bsParty
bsSchool.DataSource = dgvSchoolImages.DataSource
bsSchool.Filter = "Id_School = " & schoolId.ToString
dgvSchoolImages.DataSource = bsSchool

那项工作,但让我的应用程序变慢。那么,如何将数据从一个DataGridView传递到另一个DataGridView。

任何帮助将不胜感激,我一直在搜索没有任何结果。

2 个答案:

答案 0 :(得分:0)

您可以尝试下载所有数据一次,然后使用LINQ查询来分隔数据。以下是学习LINQ的参考:http://msdn.microsoft.com/en-us/library/bb397926.aspx。他们提供了例子等。

答案 1 :(得分:0)

我刚刚摆脱了填充方法,并通过sql命令调用了图像。 dataGridView都填充了各自的图像。现在,当我打电话时,图像比以前更快。

Private Sub fillPartyImages()
    Dim img As New DataGridViewImageCell
    Dim row() As Object
    Dim connection As New Connection
    Dim sqlConnection As New SqlConnection(connection.readConection)
    Dim PictureCol As Integer = 0 
    Dim sqlCommand As New SqlCommand("SELECT Image FROM Image_Table WHERE Id_Party = @Id_Party", sqlConnection)
    sqlCommand.Parameters.AddWithValue("@Id_Party", partyId)
    Using sqlConnection
        sqlConnection.Open()
        Dim dr As SqlDataReader = sqlCommand.ExecuteReader()
        Do While dr.HasRows
            Do While dr.Read()
                Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
                dr.GetBytes(PictureCol, 0, b, 0, b.Length)
                Dim ImgStream As New IO.MemoryStream(b)
                img.Value = Image.FromStream(ImgStream)
                row = {img.Value}
                dgvPartyImages.Rows.Add(row)
                ImgStream.Dispose()
            Loop
            dr.NextResult()
        Loop
        dr.Close()
        sqlConnection.Close()
    End Using
End Sub