Отключите выбор строк в datagridview

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

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

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

12
задан Niki 16 September 2008 в 11:42
поделиться

1 ответ

Если SelectionMode будет FullRowSelect, то необходимо будет переопределить SetSelectedRowCore для того, что DataGridView, и не называют основной SetSelectedRowCore для строк, которые Вы не хотите выбранный.

Если SelectionMode не будет FullRowSelect, то Вы захотите дополнительно переопределить SetSelectedCellCore (и не назвать основной SetSelectedCellCore для строк, которые Вы не хотите выбранный), поскольку SetSelectedRowCore только умрет при нажатии на заголовок строки и не отдельную ячейку.

Вот пример:

public class MyDataGridView : DataGridView
{
    protected override void SetSelectedRowCore(int rowIndex, bool selected)
    {
        if (selected && WantRowSelection(rowIndex))
        {
            base.SetSelectedRowCore(rowIndex, selected);
        }
     }

     protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
     {
         if (selected && WantRowSelection(rowIndex))
         {
            base.SetSelectedRowCore(rowIndex, selected);
          }
     }

     bool WantRowSelection(int rowIndex)
     {
        //return true if you want the row to be selectable, false otherwise
     }
}

Если Вы используете WinForms, взламываете Ваш designer.cs для соответствующей формы и изменяете объявление Вашего экземпляра DataGridView, чтобы использовать этот новый класс вместо DataGridView и также заменить this.blahblahblah = новая Система. Windows. Формы. DataGridView () для указания на новый класс.

16
ответ дан 2 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: