让我们说我有一个有两个部分的表格,派对部分(派对图像)和学校部分(学校图像的地方)。每个部分可以存储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
到目前为止,解决方案是用
填充两个dgvMe.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。
任何帮助将不胜感激,我一直在搜索没有任何结果。
答案 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