[英]How to pass data from a DataGridView to another VB.NET
可以说我有一个包含2个部分的表格,“ Party Section”(聚会图片在哪里)和“ School”部分(学校图片在哪里)。 每个部分可以存储n个图像(所有图像都在SQL Server的Image_Table中)。
所以这是我的问题。 我在每个部分都有一个DataGridView来显示图像和两种填充方法:
Me.Image_TableTableAdapter.FillByPartyImages(Me.CAR_AuxDataSet.Image_Table, partyId)
和一个:
Me.Image_TableTableAdapter.FillBySchoolImages(Me.CAR_AuxDataSet.Image_Table, schoolId)
两个dgv与同一个表适配器相关联,因此,当执行一个fill方法时,将填充两个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传递到另一个。
任何帮助将不胜感激,我一直在寻找没有任何结果。
您可以尝试一次下载所有数据,然后使用LINQ查询来分离数据。 这是学习LINQ的参考: http : //msdn.microsoft.com/zh-cn/library/bb397926.aspx 。 他们提供了例子等等。
我只是摆脱了fill方法,并通过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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.