2017-02-20 11 views
0

Devexpress 그리드 뷰 저장소 checkedit auto-select는 다음 셀의 checkedit를 선택하면 바로 선택 해제됩니다. MyDatabaseDevexpress XtraGrid에서 RepositoryItemCheckEdit를 사용하여 여러 셀을 선택하는 방법은 무엇입니까?

어떻게 구현

경고했다 테이블과 업로드의 새로운 스크린 샷 :

여기 Form1 load view

가 기본이되는 DB의 테이블 :

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    ConnectDatabase() 
    loadv() 
End Sub 

Private Overloads Sub loadv() 
    Dim DataAdapter5 As New MySqlDataAdapter 
    Dim DataSet1 As New DataSet 
    DataSet1.Clear() 

    Dim str1 As String = String.Format("SELECT `id`, `Name` FROM `mydb`.`mytable` ORDER BY Name ") 
    DataAdapter5 = New MySqlDataAdapter(str1, conn) 
    DataAdapter5.Fill(DataSet1) 

    ' GridControl1.RefreshDataSource() 

' GridControl1.Refresh() 

    GridControl1.DataSource = DataSet1 
    With GridControl1 
     .DataSource = DataSet1.Tables(0) 
    End With 
    GridView1.BestFitColumns() 
End Sub 

이 내 그리드이다에 대한 다중 셀 선택및 ResultsPending 열?

+0

당신이 편집 확인의 표시와 체크되지 않은 체크 박스와 스크린 샷을 추가 할 수 있습니다 여기에 내 코드입니까? – andrews

+0

VB에서 샘플을 만들었습니다.그물에 업로드하고 google drive.https : //drive.google.com/file/d/0B_JyyZZteh3eNnNRVUJ1TmRoSWs/view? usp = sharing – newcommer

+0

에 위의 공유 .zip 파일에 capture1 및 capture2라는 두 개의 스크린 샷이 추가되었습니다. – newcommer

답변

0

PassedResultPending의 확인란이있는 열이 두 개 있지만 데이터베이스에서 IDName 만로드하면됩니다. 따라서 두 개의 체크 박스 열은 데이터에 바인딩되지 않습니다. 이들은 언 바운드 열이라고합니다.

언 바운드 열의 상태를 직접 유지해야합니다.

체크 박스를 설정하면 codebehind 어딘가에 (어떤 종류의 List) 상태를 기록한 다음 양식을 다시 그릴 때 해당 상태 데이터를 다시 그리드에 제공해야합니다.

  1. GridControl.CustomUnboundColumnData Event를 - 그것은 읽기 및 쓰기의 경우를 지원합니다 :

    이 탐험 달성하기 위해.
  2. Unbound Boolean column with the CheckEdit
  3. 키워드를 사용하여 더 많은 결과를
  4. Behavour of CheckEdit with MultiSelect mode turned on
  5. 검색 DX support forum
  6. :이 도움이

희망을 '언 바운드 checkedit'.

+0

이 쿼리를 추가해도 여전히 운이 없습니다. Dim str1 As String = String.Format ("SELECT, \t"ID ","이름 ", '합격', '결과 보류', 'mydb'.mytable' ORDER BY 이름') – newcommer

+0

@newcommer, DB? 원래 DB 스크린 샷에는 존재하지 않습니다. 따라서 언 바운드 열 개념을 사용해야했습니다. 이제 DB에 이러한 열을 추가하면 그리드 HTML 마크 업에 DB 필드 이름을 적절하게 지정하여 일반 DB 바운드 열과 마찬가지로 작업해야합니다. – andrews

+0

지금 확인해 주시겠습니까? – newcommer

0
  1. 도구 상자에서 생성 된 바인딩 소스.
  2. 만든 새 untyped 데이터 집합 (도구 상자를 사용하여 dsOnDesign라는) 및 데이터 집합에 만든 테이블. 그런 다음 표에 열을 생성했습니다.
  3. 바인딩 원본에 데이터 멤버로 데이터 원본 및 테이블로 지정된 데이터 집합.
  4. 그런 다음 속성을 사용하여 바인딩 원본을 표 컨트롤로 할당합니다. 이제 데이터 세트 테이블의 열을 격자보기의 열에 바인딩해야했습니다. "그리드 디자이너"를 열어서 할 수 있습니다. 열 (기본보기)을 클릭하고 열을 선택하고 각각에 필드 이름을 지정하십시오. "Filed List"의 테이블 열과 "Columns"그룹의 Gird 뷰 열을 볼 수 있습니다.

    Public Class Form1 
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles  MyBase.Load 
        ConnectDatabase() 
        loadView() 
        End Sub 
        Private Sub loadView() 
    Dim enumerator As IEnumerator = Nothing 
    dsOnDesign.Tables(0).Clear() 
    Dim dataSetTemp As System.Data.DataSet 
    dataSetTemp = New DataSet 
    Dim da As New MySqlDataAdapter 
    Dim str As String = "SELECT id, name, passed, resultPending FROM mydb.mytable" 
    da = New MySqlDataAdapter(str, conn) 
    da.Fill(dataSetTemp) 
    Try 
        enumerator = dataSetTemp.Tables(0).Rows.GetEnumerator() 
        While enumerator.MoveNext() 
         Dim current As DataRow = DirectCast(enumerator.Current, DataRow) 
         Dim i As DataRow = Me.dsOnDesign.Tables(0).NewRow() 
         i("ID") = Conversions.ToInteger(current(0)) 
         i("Name") = current(1).ToString() 
         i("Passed") = If(current(2) Is DBNull.Value, False, fbool(CBool(current(2)))) 
         i("ResultPending") = If(current(3) Is DBNull.Value, False, fbool(CBool(current(3)))) 
         dsOnDesign.Tables(0).Rows.Add(i) 
        End While 
    Finally 
        If (TypeOf enumerator Is IDisposable) Then 
         TryCast(enumerator, IDisposable).Dispose() 
        End If 
    End Try 
    GridControl2.DataSource = dsOnDesign.Tables(0) 
    End Sub 
    
        Private Function fbool(ByVal bool As Boolean) As Boolean 
        If bool = True Then 
         Return True 
        Else 
         Return False 
        End If 
    End Function 
    End Class