2017-02-20 32 views
0

Элемент проверки хранилища сетки Devexpress автоматически отменяет выбор сразу после того, как я выберет контрольную ячейку следующей ячейки.Как реализовать множественный выбор ячеек с помощью RepositoryItemCheckEdit в Devexpress XtraGrid?

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 

Это мой вид сетки:

Form1 load view

Вот основной БД таблицы:

Встревоженные стол и загрузил новый скриншот MyDatabase

Как реализовать выбор нескольких ячеек для Passed и ResultsPending столбцы?

+0

мог бы вы добавить скриншот с редактированием меток проверены и непроверенными флажками? – andrews

+0

Я создал образец в vb.net и загружен на google drive.https: //drive.google.com/file/d/0B_JyyZZteh3eNnNRVUJ1TmRoSWs/view? usp = share – newcommer

+0

добавил два скриншота с именем capture1 и capture2 в вышеприведенный общий .zip-файл – newcommer

ответ

0

Итак, у вас есть 2 колонки с флажками Passed и ResultPending, но вы загружаете только ID и Name из базы данных. Таким образом, ваши 2 столбца флажка не привязаны к данным. Они называются Unbound Columns.

Вам нужно будет поддерживать состояние для несвязанных столбцов самостоятельно.

Итак, установив флажок, вы также должны записать его состояние где-то в коде (в List), а затем, когда форма перекрашена, вам необходимо предоставить данные проверенных состояний обратно в сетку.

Для достижения этой цели исследования:

  1. GridControl.CustomUnboundColumnData Event - обратите внимание, поддерживает чтение и запись случаев.
  2. Unbound Boolean column with the CheckEdit
  3. Behavour of CheckEdit with MultiSelect mode turned on
  4. Поиск DX support forum для получения дополнительных результатов по ключевым словам: 'checkedit несвязанный'

Надеется, что это помогает.

+0

Еще не повезло, если я тоже добавил этот запрос. Dim str1 As String = String.Format ("SELECT \t' id', 'Name',' Passed', 'ResultPending' FROM' mydb'.'mytable' ORDER BY Name ") – newcommer

+0

@newcommer, есть ли у вас эти столбцы в DB? Первоначально, в вашем скриншоте БД их нет. Поэтому вам необходимо использовать концепцию Unbound Columns. Теперь, если вы добавите эти столбцы в БД, вы должны работать с ними, как с обычными, связанными с БД столбцами, правильно указав имена полей БД в разметке HTML сетки. – andrews

+0

вы можете проверить сейчас? – newcommer

0
  1. Созданный источник привязки из панели инструментов.
  2. Создал новый неттипный набор данных (с именем dsOnDesign с помощью панели инструментов) и создал таблицу в наборе данных. Затем создаются столбцы в таблице.
  3. Назначенный набор данных как источник данных и таблица как элемент данных для источника привязки.
  4. Затем назначается источник привязки для управления сеткой с использованием свойств. Теперь мне нужно было привязать столбцы таблицы набора данных к столбцам сетки. Вы можете сделать это, открыв «Дизайнер сетки». Нажмите Столбцы (Основной вид) -> выберите столбцы и назначьте имя поля каждому. Вы можете увидеть столбцы таблицы в столбцах «Filed List» и Gird в группе «Columns». Вот мой код:

    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