некоторые из членов моего класса < T > не включаются в представление данных, привязанное к BindingList < T >

StackOverflow https://stackoverflow.com/questions/1441050

  •  10-07-2019
  •  | 
  •  

Вопрос

public class ANote{
    public string NoteId = "";
    public string Note = "";
    public string NoteCollector = "";
    public DateTime NoteCollectionDate = DateTime.MinValue;
    public string NoteCollectionDay {
    get { return NoteCollectionDate.toString("MM/dd/yyyy") ; }
    }
    public string NoteCollectionTime {
    get { return return NoteCollectionDate.toString("hh/mm tt"); }
    }
    public DateTime ADate = DateTime.Now;
    public double AAmount = 0.0D;
    public string AName = "";
    }

И BindingList aList;

Также есть сетка с набором DataGridTExtBoxColumns, которые я пытаюсь привязать к приведенному выше (уже заполненному) списку, например:

colDate.DataPropertyName ="NoteCollectionDay";
colTime.DataPropertyName = "NoteCollectionTime";
colName.DataPropertyName = "NoteCollector";
colADate.DataPropertyName = "ADate";
colAAmount.DataPropertyName = "AAmount";
colAName.DataPropertyName = "AName";
colNotes.DataPropertyName = "Note";

grdNotes.AutoGenerateColumns = false;
grdNotes.DataSource = aList;

Но во время выполнения только мои столбцы colDate и colTime заполняются правильно. Все остальные пустые. Когда я смотрю конкретно на Grid.Rows [idx] .Cells [idx] .Value для других столбцов, все это равно нулю.

Кроме того, если для AutoGenerateColumns указано значение true, я вижу дополнительный столбец NoteID, который также заполнен правильно, но поля ANote, Amount, ADate, AName и Note по-прежнему не заполнены!

Нет ничего плохого в данных в списке ... все члены класса имеют допустимые значения.

Если я что-то упускаю, похоже, это проблема с BindingList или DataGridView. Если нет, то есть идеи по отладке этого ... это довольно простой тестовый сценарий!

Это было полезно?

Решение

Вы ссылаетесь на имя свойства данных, следовательно, будут работать только свойства?

Остальные поля. Попробуйте преобразовать их в автоматические свойства:

public string Note { get; set; }

Также обратите внимание, что BindingList будет уведомлять подписчиков только об изменении содержимого самого списка, а не о свойстве объекта, содержащегося в списке.

Если вы хотите добиться этого, вы хотите, чтобы ваш объект реализовал INotifyPropertyChanged и инициировал уведомление в методе set свойства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top