Ошибка просмотра данных System.IndexOutOfRangeException: индекс 0 не имеет значения - PullRequest
1 голос
/ 12 октября 2011


Я получаю одну ошибку при попытке заполнить источник привязки.Исключение заключается в следующем;

System.IndexOutOfRangeException: Index 0 does not have a value.
   at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)

Я использую общий список для заполнения источника привязки.Код выглядит так:

foreach (listItem)
  {
      BindingSource.Add(listItem);
  }

Я попытался сбросить свойство источника данных, но проблема все еще та же.

Помогите мне решить эту проблему.

Ответы [ 4 ]

5 голосов
/ 12 октября 2011

Насколько я понимаю, вам не нужно заполнять BindingSource, вам просто нужно заполнить список, к которому он привязан. Вот и вся идея связывания. Вы связываете свой контроль с данными, используя bindingsource.

А потом

myBindingSource.DataSource = listItem;

сделает это.

Кроме того, вместо привязки вашего вида сетки данных к BindingSource и вашего BindingSource к списку, вы можете просто привязать свое представление сетки данных к BindingList. Он похож на List, но также реализует интерфейс IBindingList (когда вы устанавливаете объект BindingList в List, он возвращает объект, реализующий IBindingList, поэтому он будет очень похож)

Соу вы можете сделать:

myDataGridView.DataSource = myBindingList;

Если свойства элементов в myBindingList изменятся, результат будет отражен в datagridview по умолчанию, если коллекция изменилась (некоторые вещи были добавлены или удалены), вы можете обновить ее, используя:

 CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
 if (cm != null)
 {
    cm.Refresh();
 }
1 голос
/ 07 октября 2017

Проблема была решена с помощью этого кода:

grdOrders.DataSource = null;
grdOrders.DataSource = this._controller.OrderActionData;
0 голосов
/ 07 января 2016

Ошибка возникает, когда список больше не синхронизируется с DataGridView.

Вы можете вручную обновить привязки после изменения списка, чтобы обеспечить повторную синхронизацию привязок:

myBindingSource.CurrencyManager.Refresh();
0 голосов
/ 12 октября 2011

Я снимаю в темноте здесь, но если предположить, что это псевдокод, то вам нужно установить источник данных элемента пользовательского интерфейса в качестве источника привязки.Кроме того, может быть проще сделать что-то вроде этого:

var binding = new BindingSource();
binding.DataSource = listItem;
DataGridView.DataSource = binding;

Более подробную информацию о BindingSource можно найти здесь: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

...