C # datagridview изменение события об ошибке - PullRequest
0 голосов
/ 25 октября 2011

, когда я работаю с событием selectionbound в datagridview. если я нажму на заголовок столбца, это даст мне исключение: Исключение NullReferenceException не было обработано кодом пользователя Ссылка на объект не установлена ​​для экземпляра объекта.

это мой код

    private void dgvEvents_SelectionChanged(object sender, EventArgs e)
    {
        //
        //Select By EventID Operation.
        //
        eventID = int.Parse(dgvEvents.Rows[dgvEvents.CurrentRow.Index].Cells["EventID"].Value.ToString());
        EventEntity = EventsMethods.SelectByID(eventID);
        txtEventName.Text = EventEntity.Name;
        cboxEventsCategories.SelectedValue = EventEntity.EventCategoryID;
        dateTimePickerEvent.Text = EventEntity.Date.ToString();
        txtBenefNum.Text = EventEntity.BeneficiariesNumber.ToString();
        txtResultB.Text = EventEntity.ResultBefore.ToString();
        txtResultA.Text = EventEntity.ResultAfter.ToString();
        txtPercentage.Text = EventEntity.Percentage.ToString();
        //
        //Show EventsMembers.
        //
        FillEventsMembersDGV();
    }

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

один из них возвращает нулевой объект ...

dgvEvents.Rows[dgvEvents.CurrentRow.Index].Cells["EventID"].Value.ToSt‌​ring()

может быть любым из них:

dgvEvents
dgvEvents.CurrentRow
dgvEvents.Rows[....]
dgvEvents.Rows[....].Cells
dgvEvents.Rows[....].Cells["EventID"]
dgvEvents.Rows[....].Cells["EventID"].Value

Лучший способ узнать это - разбить его на шаги:

    var curRow= dvgEvents.CurrentRow;
    if ( curRow != null )
         var index = curRow.Index;

// etc
0 голосов
/ 25 октября 2011

Вы, вероятно, получаете эту ошибку, потому что она вызывает событие, когда оно недопустимо (т. Е. -1), таким образом, выбрасывая это исключение.Попробуйте это:

   if ((e.RowIndex >= 0) && (e.ColumnIndex >= 0))
    {
            //
            //Select By EventID Operation.
            //

            //Also, use Convert.ToString() rather than .ToString();
            eventID = int.Parse(Convert.ToString(dgvEvents.Rows[dgvEvents.CurrentRow.Index].Cells["EventID"].Value));
            EventEntity = EventsMethods.SelectByID(eventID);
            txtEventName.Text = EventEntity.Name;
            cboxEventsCategories.SelectedValue = EventEntity.EventCategoryID;
            dateTimePickerEvent.Text = EventEntity.Date.ToString();
            txtBenefNum.Text = EventEntity.BeneficiariesNumber.ToString();
            txtResultB.Text = EventEntity.ResultBefore.ToString();
            txtResultA.Text = EventEntity.ResultAfter.ToString();
            txtPercentage.Text = EventEntity.Percentage.ToString();
            //
            //Show EventsMembers.
            //
            FillEventsMembersDGV();
    }
...