2013-09-27 4 views
0

Как вызвать событие внутри функции? Потому что у меня ошибка Object reference not set to instance of an object, и ошибка указана на: _e.RowIndexВызвать событие внутри функции C#

И мне было интересно, как я могу назвать событие внутри функции. Теперь то, что я мог бы это вызвать событие из new EventHandler(....), но теперь я хочу вызвать событие внутри функции, и он дал мне ошибку Object reference not set to instance of an object

Вот код:

private void UpdateQuantityDataGridView(object sender, EventArgs e) 
{ 
    DataGridViewCellEventArgs _e = null; 

    cmdSelect.Parameters.Add("ProductCode" , System.Data.OleDb.OleDbType.VarChar) ; 
    cmdSelect.Parameters[ "ProductCode" ].Value = dataGridView1[ "Product Code" , _e.RowIndex].Value; 

} 

ли код выше, правильный способ сделать это?

EDITED

Это где я назвал функцию UpdateQuantityDataGridView:

if (_choice.comboBox1.Text == "English") 
       { 
        System.Media.SoundPlayer _sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Exclamation.wav"); 
        _sounds.Play(); 
        MessageBox.Show("Updated Successfully!", "Updated"); 

        ShowButtons(sender, e); 

        DisableColumnEdited(sender, e); 

        UpdateQuantityDataGridView(sender, e); 
       } 

Вот мой случай:

Когда данные редактирования пользователя в DataGridView, и пользователь нажимает кнопку "ОК" , приведенный выше код выполнит и обновит базу данных из DataGridView, поэтому я хочу получить доступ к DataGridViewCellEventArgs внутри функции. Я не могу выполнить и работать, когда позвоню, используя new EventHandler(....)

+4

'_e = null' отсрочка нулевой ссылки приведет к' NullReferenceException'. Что вы пытаетесь достичь? Что бы вы хотели вернуть «_e.RowIndex'? –

+0

'_e.RowIndex' должен сообщить программе, какую строку я выбрал из DataGridView – Kaoru

+1

Покажите мне свой код, где вы называете' UpdateQuantityDataGridView' –

ответ

3

Вы устанавливаете _e на null, затем пытаетесь использовать его, чтобы создать NullReferenceException (как вы обнаружили).

Я думаю, что вы хотите отличить e как DataGridViewCellEventArgs вместо создания новой переменной.

private void UpdateQuantityDataGridView(object sender, EventArgs e) 
{ 
    cmdSelect.Parameters.Add("ProductCode" , System.Data.OleDb.OleDbType.VarChar) ; 
    cmdSelect.Parameters[ "ProductCode" ].Value = dataGridView1[ "Product Code" , ((DataGridViewCellEventArgs)e).RowIndex].Value; 

} 

(Как уже упоминалось в комментариях, это предполагает, что вы передаете экземпляр DataGridViewCellEventArs для e.)

+0

, что определенно не будет работать, потому что 'e' имеет тип' EventArgs'. –

+0

Я попробовал этот 'dataGridView [" Код продукта ", (DataGridViewCellEventArgs) _e.RowIndex] .Value' Но' _e' не существует в текущем контенте. – Kaoru

+1

@neoistheone и 'DataGridViewCellEventArgs' получены из' EventArgs', поэтому он может работать, если это то, что передается как 'e', все зависит от того, как вызывается« UpdateQuantityDataGridView », нам нужно увидеть код, где либо он присоединяется к событию, либо сам вызывает функцию. –

4

Вы устанавливаете переменную _e в значение null. Затем вы указываете _e.RowIndex, когда вы никогда не устанавливаете.

+1

Я удалил бит «can not leave comment». То, что вы сказали, является ответом, не нужно оставлять его в качестве комментария. –

0

Вы устанавливаете _e в null.

Тогда вы пытаетесь получить доступ к своему свойству RowIndex, что является тем, что бросает NullReferenceException.

Все, что вы пытаетесь сделать, это добавить параметр в cmdSelect. Что именно вы пытаетесь достичь?

+0

Вопрос может быть в комментариях –

Смежные вопросы