Сгенерированный вручную столбец DataGridViewCheckBoxColumn не обновляет связанный объект

#.net #datagridview

#.net #datagridview

Вопрос:

При использовании DataGridView.AutoGenerateColumns = True, логическое свойство связанного объекта обновляется нормально, но не при добавлении столбцов вручную. Значения остаются ложными.

Есть ли какие-то параметры, которые мне нужно установить при добавлении столбца DataGridViewCheckBoxColumn? Кажется, недостаточно установить .DataPropertyName.

Я вижу, что у него есть некоторые другие свойства, такие как.Истинное значение, .FalseValue и т.д., Но не уверен, для чего они нужны?

Или мне нужно написать какой-то тип пользовательских событий форматирования / проверки ячеек?

Редактировать: Я добавляю столбец методом расширения:

     <Extension()> _
Public Sub AddCheckBoxColumn(ByVal dgv As DataGridView, ByVal propertyName As String, ByVal colName As String, ByVal fillWeight As Integer)
    Dim col As New DataGridViewCheckBoxColumn(False)
    col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    col.HeaderText = colName
    col.Name = colName
    col.Width = fillWeight
    col.DataPropertyName = propertyName
    dgv.Columns.Add(col)
End Sub
  

Комментарии:

1. Можете ли вы показать разметку и исходный код, если добавите их вручную в code behind?

2. Я не знаком с выражением «code behind»? Это проект Windows Forms. Но добавлен некоторый код выше.

3. Запускаете ли вы DataBind () в своей сетке после добавления столбца?

Ответ №1:

Возможно, вы неправильно написали имя связанного поля? Это должно работать до тех пор, пока ваш столбец данных имеет логический тип.

В противном случае значение TrueValue будет выражать значение, устанавливаемое при установленном флажке, а FalseValue будет выражать значение, когда флажок не установлен, например, вы могли бы сопоставить строки «Checked» и «Unchecked» с полем типа string.

  1. Правильно ли выполняется чтение из поля?
  2. Можете ли вы установить флажок, или он остается непроверенным, когда вы нажимаете на него?

Комментарии:

1. Да, я печатаю поле в debug, и оно всегда равно False. Флажки устанавливаются / снимаются, как и ожидалось. Я определенно использую правильное имя свойства. Итак, требуется установить только поле .DataPropertyName?

2. Да, это для столбца DataGridViewCheckBoxColumn. Если вы установите для object значение True в коде, отражает ли это DataGridView? Также попробуйте DataGridView. EndEdit() для фиксации пользовательских изменений.

3. А .. Нашел мою ошибку. Имел неполный метод расширения с тем же именем в другой библиотеке. Таким образом, он не использовал метод, который я менял.

Ответ №2:

Обнаружена моя ошибка. Имел неполный метод расширения с тем же именем в другой библиотеке. Таким образом, он не использовал метод, который я менял.