2014-11-14 2 views
1

파티 부분 (파티 이미지가있는 부분)과 학교 부분 (학교 이미지가있는 부분)이 2 개인 섹션이 있다고 가정 해 보겠습니다. 각 섹션은 n 개의 이미지를 저장할 수 있습니다 (모든 이미지는 SQL Server의 Image_Table에 있음).DataGridView에서 다른 VB.NET으로 데이터를 전달하는 방법

여기 내 문제가 있습니다.

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

하고 :

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

두 DGV가 있으므로 동일한 테이블 어댑터와 연관된, 하나 개의 충전 방법이 실행 I는 각 섹션에있는 DataGridView를 갖도록 이미지 두 충전 방법을 도시 두 dgv를 채 웁니다.

나는 두 번째 방법을 실행합니다 (dgvPartyImages 및 학교 이미지와 dgvSchoolImages을 입력) 한 후 검색 먼저 fill 메소드를 실행합니다 (dgvPartyImages 파티 이미지와 dgvSchoolImages을 채우기), dgvAux에 dgvPartyImages에서 데이터를 저장하려고 dgvPartyImages에 드 dgvAux 데이터,하지만 난 그게 여기

를 작동 할 수없는 코드입니다 :

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) 
작업 그

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 

,하지만 내 응용 프로그램이 느린합니다

한 다음 partyId 및 schoolId에 의해 필터링 할 수 있습니다. 그렇다면 한 DataGridView에서 다른 DataGridView로 데이터를 전달하는 방법.

도움이 될만한 결과가 있습니다.

+0

무엇이 문제입니까? –

+0

@SeanLange 하나의 DataGridView에서 다른 데이터로 데이터를 전달하는 방법 – smartdan

답변

0

모든 데이터를 한 번 다운로드 한 다음 LINQ 쿼리를 사용하여 데이터를 분리 해 볼 수 있습니다. 다음은 LINQ 학습을위한 참조입니다 : http://msdn.microsoft.com/en-us/library/bb397926.aspx. 그들은 예제 등을 제공합니다.

+0

답변 해 주셔서 감사합니다. 그러나 이것이 내 문제를 해결하는 방법을 알지 못합니다. 당신은 더 구체적 일 수 있습니까? – smartdan

+0

아마도 당신이하려는 일에 착각 한 것 같습니다. 파티 이미지와 학교 이미지를 IImages와 같은 인터페이스 (예 : 이미지, ID 및 파티 또는 학교 이미지의 세 번째 열거)로 구현해야합니다. 그런 다음 AllImages를 호출 할 수있는 List (Of IImages)에 모든 데이터를 다운로드하게됩니다. 그런 다음을 수행하십시오 dgvPartyImages.DataSource = AllImages.Where (기능 (IMG) img.Id = PartyId.ToString() 그리고 img.Type = 파티) dgvSchoolImages.DataSource = AllImages.Where (기능 (IMG) img.Id = SchoolId.ToString() 그리고 img.Type = School) – Surreal8Developer

+0

다시 한번 감사드립니다. 그러나 나는 그것보다 간단한 것을 원했습니다. – smartdan

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 
관련 문제