Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 27.09.2019
Сообщений: 2
.NET 4.x

DataGridView BindingList переопределение хэша

27.09.2019, 01:42. Показов 1689. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день! Ситуация такая. Есть DataGridView. К нему привязан BindingSource, к которому привязан BindingList<MyItem>. В классе MyItem переопределен метод GetHashCode(). В целом все работает, но проблема в следующем: если у существующего элемента стереть текст (грубо говоря ввести "", тобишь пустую строку), то программа выдаст NPE (см. вложение). Если же метод GetHashCode выдает 100% коллизий, то такой ошибки не происходит. Притом напрямую в BindingList добавить элемент с пустой строкой можно.

Возможно ли переопределять у Item'ов BindingList'а метод хэш кода? И вообще в чем может быть проблема?

Вот код формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace WindowsFormsApp2 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
 
            BindingSource source = new BindingSource();
            _list = new BindingList<MyItem>();
            _list.AllowNew = true;
            _list.AllowRemove = true;
            source.DataSource = _list;
 
            dataGridView1.DataSource = source;
 
        }
 
        private BindingList<MyItem> _list;
 
    }
}
Класс MyItem:
C#
1
2
3
4
5
6
7
8
9
10
namespace WindowsFormsApp2 {
    public class MyItem {
        public string Name { get; set; }
 
        public override int GetHashCode() {
            return Name.GetHashCode();
        }
 
    }
}
Заранее спасибо!
Миниатюры
DataGridView BindingList переопределение хэша  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2019, 01:42
Ответы с готовыми решениями:

Как связать DataGridView и BindingList<object[]>?
Всем привет. Прошу сильно не пинать за 100500-й банальный вопрос, но я сегодня просидел полдня и так не смог осилить, перечитал и форум и...

Переопределение событий DataGridView
Уважаемые коллеги! Прошу помочь выйти из казалось бы совсем простого затруднения. У DataGridView есть такое событие CellClick или...

Привязка BindingList к DataGridView и поведение CurrentCell
Натолкнулся на интересное поведение DataGridView. (1) Если к нему привязать некий BindingList: dgv.DataSource=bindlist1 и походить...

2
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
27.09.2019, 01:49
Лучший ответ Сообщение было отмечено grga как решение

Решение

Такой вариант пробовали?
C#
1
2
3
4
        public override int GetHashCode()
        {
            return Name?.GetHashCode() ?? 0;
        }
Да и вообще из вашего скрина не видно где именно у вас NRE возникает...
1
0 / 0 / 0
Регистрация: 27.09.2019
Сообщений: 2
27.09.2019, 02:22  [ТС]
Да, такой вариант сработал. Правда не совсем понятно почему DataGridView при стирании строки заменяет ее Null'ом вместо просто пустой строки. Но да ладно, по крайне мере в ситуации разобрался. Спасибо за помощь!

Извиняюсь за не очень информативный скрин. Но студия указывала именно это место (сам из-за этого потратил сутки на то, чтобы понять, что дело в GetHashCode). Разве что stacktrace сможет как то прояснить ситуацию

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   в System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
   в System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)
   в System.Windows.Forms.DataGridViewCell.SetValue(Int32 rowIndex, Object value)
   в System.Windows.Forms.DataGridView.PushFormattedValue(DataGridViewCell& dataGridViewCurrentCell, Object formattedValue, Exception& exception)
   в System.Windows.Forms.DataGridView.CommitEdit(DataGridViewCell& dataGridViewCurrentCell, DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave)
   в System.Windows.Forms.DataGridView.CommitEdit(DataGridViewDataErrorContexts context, Boolean forCurrentCellChange, Boolean forCurrentRowChange)
   в System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
   в System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
   в System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
   в System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
   в System.Windows.Forms.Control.WndProc(Message& m)
   в System.Windows.Forms.DataGridView.WndProc(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   в System.Windows.Forms.Application.Run(Form mainForm)
   в WindowsFormsApp2.Program.Main() в C:\Users\Grga\source\repos\WindowsFormsApp2\WindowsFormsApp2\Program.cs:строка 16

Еще раз спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2019, 02:22
Помогаю со студенческими работами здесь

Не отображается изменение BindingList на DataGridView
Всем привет! Делаю привязку DataGridView к BindingList. Вроде бы все как обычно, но почему-то отображение не происходит. Дебажил,...

Переопределение DataGridView и DataGridViewColumn
Создал новый класс унаследовав DataGridView. В свойство Columns при привязывании к DataSource добавляется коллекция DataGridViewColumn,...

Десериализация BindingList<>
Всем привет, не могу понять почему при не забрасывает данные в DataGridView при использовании десериализации BindingList&lt;&gt; С...

DataGridViev BindingList
Здравствуйте! в очередной раз обращаюсь к вам! Проблема такая есть DataGridview. Через DataSource я указываю источник данных...

разница List и BindingList
List и BindingList, в чем разница? Маленький примерчик, если можно.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru