System windows forms datagridviewcell value get вернул null

How Can Fixed This Error When return null This is the relevant code part: private void DgvIncome_MouseClick(object sender, MouseEventArgs e) { //try { ...

How Can Fixed This Error When return null

This is the relevant code part:

        private void DgvIncome_MouseClick(object sender, MouseEventArgs e)
        {

            //try
            {
                txtCode.Text = dgvIncome.SelectedRows[0].Cells[1].Value.ToString();
                txtRecNo.Text = dgvIncome.SelectedRows[0].Cells[2].Value.ToString();
                txtMembershipID.Text = dgvIncome.SelectedRows[0].Cells[3].Value.ToString();
                txtGustName.Text = dgvIncome.SelectedRows[0].Cells[4].Value.ToString();
                txtGustMobile.Text = dgvIncome.SelectedRows[0].Cells[5].Value.ToString();
                txtNote.Text = dgvIncome.SelectedRows[0].Cells[6].Value.ToString();
                txtSalesNo.Text = dgvIncome.SelectedRows[0].Cells[7].Value.ToString();
                txtMainPackageNo.Text = dgvIncome.SelectedRows[0].Cells[8].Value.ToString();
                txtSubPackageNo.Text = dgvIncome.SelectedRows[0].Cells[9].Value.ToString();
                txtPackageNo.Text = dgvIncome.SelectedRows[0].Cells[10].Value.ToString();
                txtNatPrice.Text = dgvIncome.SelectedRows[0].Cells[11].Value.ToString();
                txtDiscount.Text = dgvIncome.SelectedRows[0].Cells[12].Value.ToString();
                dtpStartDate.Text = dgvIncome.SelectedRows[0].Cells[13].Value.ToString();
                dtpEndDate.Text = dgvIncome.SelectedRows[0].Cells[14].Value.ToString();
                ShowSalesName();
                ShowMainPackageName();
                ShowSubPackageName();
                ShowPackageName();
                ShowPrice();
                chbxSearch.Checked = false;
            }

Error: When select a row, there are empty values ,

System.NullReferenceException: 'Object reference not set to an instance of an object.'

System.Windows.Forms.DataGridViewCell.Value.get returned null.

8 / 8 / 2

Регистрация: 30.01.2015

Сообщений: 157

1

20.05.2018, 17:59. Показов 5536. Ответов 3


System.Windows.Forms.DataGridViewCell.Value.get вернул null.

dataGridView заполнен данными, но не могу выдернуть значение из ячейки.
В другом проекте точно так же все работает прекрасно, вообще не могу понять почему так? Загадка прям!

Не могу получить значение из dataGridView

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



546 / 477 / 315

Регистрация: 24.09.2013

Сообщений: 3,345

Записей в блоге: 1

20.05.2018, 21:44

2

К сожалению, Вы написали просто безграмотный код. Простейшая задача, имея правильный аналог,забыли указать
АДРЕС ячейки (строка, столбец)



0



8 / 8 / 2

Регистрация: 30.01.2015

Сообщений: 157

21.05.2018, 20:50

 [ТС]

3

Напишите пример грамотного. Пока только слова.

Добавлено через 24 минуты
Ошибка найдена. Cells[0] не существует. значение id сидит в Cells[4]. А вы лучше вообще советы не давайте, так как они не просто бесполезны, а откровенно вредны!



0



zna926

546 / 477 / 315

Регистрация: 24.09.2013

Сообщений: 3,345

Записей в блоге: 1

22.05.2018, 11:38

4

Цитата
Сообщение от Mudrec
Посмотреть сообщение

System.Windows.Forms.DataGridViewCell.Value.get вернул null.

Уважаемый Mudrec! Конечно, Вы правы. Написав даже 1 строчку этого сложнейшего кода, трудно было не ошибиться.
Безусловно, все это ВЫ прекрасно знали и мое замечание могло только навредить.
Желаю дальнейших творческих успехов.

Добавлено через 13 часов 30 минут
Например:

C#
1
2
3
4
5
6
7
8
9
10
11
12
Forms Code
{  
  private void button1_Click(object sender, EventArgs e)
  {
        String s = dataGridView1.Rows[m].Cells[n].Value.ToString();  //variant1
         textBox1.Text = s;
        MessageBox.Show(dataGridView1.Rows[m].Cells[n].Value.ToString());  //variant2
 
         
  }     
 
}



0



Здесь мне нужно избегать null из datagridview (winform)

 private void SendUpdate()
        {
            
            if ((string)dataGridView1.SelectedRows[0].Cells[0].Value != string.Empty )
            {
                if (1 == dataGridView1.SelectedRows.Count)
                {
                    int Id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
                    Update up = new Update();
                    up.AssignValue(Id);
                    up.textBox1.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                    up.comboBox1.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                    up.textBox2.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                    up.textBox3.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
                    up.textBox4.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
                    up.textBox5.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString();
                    up.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Please Select the Single Data Which Required to Update");
                }
            }
            else 
            {

                MessageBox.Show("You Select the empty Row");

            }
            
        }

Я пробовал !=string.empty;, !=null;, ! = «»;
но ошибка не решена.

1 == dataGridView1.SelectedRows.Count это правда

Но

(string)dataGridView1.SelectedRows[0].Cells[0].Value имеет нулевое значение
Показать ошибку

System.NullReferenceException: ‘Object reference not set to an instance of an object.’
System.Windows.Forms.DataGridViewCell.Value.get returned null.

Как исправить эту ошибку при возврате null

Это соответствующая часть кода:

        private void DgvIncome_MouseClick(object sender, MouseEventArgs e)
        {

            //try
            {
                txtCode.Text = dgvIncome.SelectedRows[0].Cells[1].Value.ToString();
                txtRecNo.Text = dgvIncome.SelectedRows[0].Cells[2].Value.ToString();
                txtMembershipID.Text = dgvIncome.SelectedRows[0].Cells[3].Value.ToString();
                txtGustName.Text = dgvIncome.SelectedRows[0].Cells[4].Value.ToString();
                txtGustMobile.Text = dgvIncome.SelectedRows[0].Cells[5].Value.ToString();
                txtNote.Text = dgvIncome.SelectedRows[0].Cells[6].Value.ToString();
                txtSalesNo.Text = dgvIncome.SelectedRows[0].Cells[7].Value.ToString();
                txtMainPackageNo.Text = dgvIncome.SelectedRows[0].Cells[8].Value.ToString();
                txtSubPackageNo.Text = dgvIncome.SelectedRows[0].Cells[9].Value.ToString();
                txtPackageNo.Text = dgvIncome.SelectedRows[0].Cells[10].Value.ToString();
                txtNatPrice.Text = dgvIncome.SelectedRows[0].Cells[11].Value.ToString();
                txtDiscount.Text = dgvIncome.SelectedRows[0].Cells[12].Value.ToString();
                dtpStartDate.Text = dgvIncome.SelectedRows[0].Cells[13].Value.ToString();
                dtpEndDate.Text = dgvIncome.SelectedRows[0].Cells[14].Value.ToString();
                ShowSalesName();
                ShowMainPackageName();
                ShowSubPackageName();
                ShowPackageName();
                ShowPrice();
                chbxSearch.Checked = false;
            }

Ошибка: при выборе строки есть пустые значения,

System.NullReferenceException: 'Object reference not set to an instance of an object.'

System.Windows.Forms.DataGridViewCell.Value.get returned null.

1 ответ

Лучший ответ

Зависит от того, что вы хотите сделать, если значение ячейки равно нулю. Самый простой способ справиться с этим — использовать? оператор вроде этого:

txtCode.Text = dgvIncome.SelectedRows[0].Cells[1].Value?.ToString();

Это приведет к присвоению null свойству Text текстовых полей в случае, если значение ячейки равно null, что, вероятно, именно то, что вам нужно.

См. https://csharp.today/c -6-features-null-условные-и-и-нулевые-объединяющие-операторы/


6

StefanFFM
2 Ноя 2019 в 17:29

Есть дгв2, в котором находятся чекбоксы. По какой то причине, при попытке получить значение ячейки, я получаю ошибку.
введите сюда описание изображения

Допустим, хочу посмотреть в содержимое ячейки вот так

private void Import_DoubleClick(object sender, EventArgs e)
        {
            MessageBox.Show(dataGridView2.Rows[0].Cells[0].Value.ToString());
        }

Получаю ошибку

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

System.Windows.Forms.DataGridViewCell.Value.get вернул null.

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

private void button5_Click(object sender, EventArgs e)
        {
            string src = "0", upd = "0";
            if (radioButton1.Checked) src = "1";
            if (checkBox1.Checked) upd = "1";

            MySql.command($"UPDATE import SET link = '{MySql.escape(textBox2.Text)}', isupdate = '{upd}', source = '{src}', type = '{MySql.escape(comboBox1.Text)}', sklad = '{MySql.escape(comboBox2.Text)}', skip = '{textBox1.Text}', group_id = '{textBox3.Text}' WHERE name = '{MySql.escape(name)}'");

            MySql.command($"DELETE FROM import_ WHERE import_name = '{MySql.escape(name)}'");

            for (int i = 0; i < dataGridView3.Columns.Count; i++)
            {
                string combobox = "----------";
                if (dataGridView3.Rows[0].Cells[i].Value as string != null) combobox = dataGridView3.Rows[0].Cells[i].Value.ToString();

                MySql.command($"INSERT INTO import_ (columnindex, import_name, comboBox, checkBox) VALUES ('{i}','{MySql.escape(name)}','{MySql.escape(combobox)}','{dataGridView2.Rows[0].Cells[i].Value}')");
            }

            MessageBox.Show("Сохранено");
        }

Приведу еще код, который создает и заполняет все дгв.

private void loadGridsInfo()
        {
            var dt = MySql.getTable($"SELECT columnindex, comboBox, checkBox FROM import_ WHERE import_name = '{name}'");
            dt = dt.AsEnumerable().OrderBy(n => int.Parse(n[0].ToString())).CopyToDataTable();
            int count = dt.Rows.Count;
            int min;
            if (dataGridView1.Columns.Count < count) min = dataGridView1.Columns.Count;
            else                                     min = count;

            for (int i = 0; i < min ; i++)
            {
                if (dt.Rows[i][2].ToString() == "True") dataGridView2.Rows[0].Cells[i].Value = true;

                dataGridView3.Rows[0].Cells[i].Value = dt.Rows[i][1].ToString();
            }
        }

private void adaptGrids()
        {
            dataGridView2.Rows.Clear();
            dataGridView3.Rows.Clear();
            dataGridView2.Columns.Clear();
            dataGridView3.Columns.Clear();

            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                var clmn1 = new DataGridViewComboBoxColumn();
                var clmn2 = new DataGridViewCheckBoxColumn();

                clmn1.HeaderText = "C" + i;
                clmn2.HeaderText = "C" + i;
                clmn1.Width = dataGridView1.Columns[i].Width;
                clmn2.Width = dataGridView1.Columns[i].Width;
                clmn1.DataSource = comboBox;

                dataGridView2.Columns.Add(clmn2);
                dataGridView3.Columns.Add(clmn1);
            }
            dataGridView2.Rows.Add();
            dataGridView3.Rows.Add();
        }

Один из тех случаев, когда даже не знаю куда копать. Есть идеи?


 The exception is thrown at line if (bool.Parse(row.Cells[0].Value.ToString())).

 Exception details:

System.NullReferenceException: ‘Object reference not set to an instance of an object.’

System.Windows.Forms.DataGridViewCell.Value.get returned null.

private void btnDeleteCategory_Click(object sender, EventArgs e)

{

foreach (DataGridViewRow row in CategoryGV.Rows)

{

if (bool.Parse(row.Cells[0].Value.ToString()))

{

string cs = ConfigurationManager.ConnectionStrings[«aladin»].ConnectionString;

SqlConnection con = new SqlConnection(cs);

SqlCommand cmd = new SqlCommand(«DELETE FROM lwpos_categories WHERE id= ‘» + Convert.ToInt32(row.Cells[1].Value) + «‘ «, con);

con.Open();

cmd.ExecuteNonQuery();

con.Close();

}

}

MessageBox.Show(«Deleted Successfully», «Successfull operation», MessageBoxButtons.OK, MessageBoxIcon.Information);

}

Ошибка: «Входная строка была в неправильном формате.»

int sum = 0;
        for (int i = 0; i < dataGridView1.Rows.Count;++i)
        {
            sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);

        }

        label1.Text = sum.ToString();

Выше приведен код для расчета. Когда я запускаю приложение, он не отображает ошибок. После загрузки datagridview из MySql и нажатия кнопки, которая приводит к вышеуказанной функции, отображается ошибка.

System.FormatException: «Строка ввода не была в правильном формате».

sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);

Вот пример datagridview

Если я сменил ячейки [2] на ячейки [0], он отлично работает

Я все еще новичок на С#, но Im догадывается, что он не может преобразовать данные в столбце «заработанные» в целые числа?

03 окт. 2018, в 15:20

Поделиться

Источник

Учитывая ваш скриншот, Cells[2] не является int а Decimal и сумма должна быть объявлена таким типом.

Decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    sum += Decimal.Parse((dataGridView1.Rows[i].Cells[2].Value ?? "").ToString());
}

Если по некоторым причинам значение пустое или неправильное, существует способ проверить, было ли преобразование успешным с помощью TryParse:

Decimal sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    Decimal temp;
    if (Decimal.TryParse((dataGridView1.Rows[i].Cells[2].Value ?? "").ToString(), out temp))
        sum += temp;
}

label1.Text = sum.ToString();

Примечание: (dataGridView1.Rows[i].Cells[2].Value?? "") выполнит проверку против dataGridView1.Rows[i].Cells[2].Value. Если он равен null вместо » null "" будет использоваться значение "". null.ToString() исключение.

Cid
03 окт. 2018, в 10:11

Поделиться

Вы должны проверить, имеет ли поле числовое значение, а затем преобразует его в int.

float sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
    float temp = 0;
    float.TryParse(dataGridView1.Rows[i].Cells[2].Value?.ToString(), out temp);
    sum += temp;

}

label1.Text = sum.ToString();

Amin Mozhgani
03 окт. 2018, в 10:57

Поделиться

Попробуй это

Decimal sumcol = 0;
for (int i = 0; i < dataGridView1.Rows.Count;++i)
{
Decimal val;
string colval = dataGridView1.Rows[i].Cells[2].Value.ToString();
if(colval  != null){
 if (Decimal.TryParse(colval, out val))
    sum += val;
}

label1.Text = sum.ToString();}

TouchStarDev
03 окт. 2018, в 10:48

Поделиться

Ещё вопросы

  • 1Рассчитать Tf-Idf баллы в пандах?
  • 1Событие Loaded FrameworkElement — сборка мусора
  • 1Какое лучшее решение для чтения большого XML-документа?
  • 0MercadoPago Тестовый пользователь
  • 1Java создать экземпляр с глубоко пустыми объектами
  • 1response-native-twilio-video-webrtc Ошибка компиляции Android
  • 1Максимальный размер веб-страницы в целом? iPhone? Android?
  • 0я хочу скрыть все данные ответа json из браузера
  • 0Grails Webflow с мастером jQuery формы не работает
  • 0Угловой JS: «это» внутри функции нг-если
  • 0WSDL: не могу определить параметр для метода
  • 1Не удается импортировать замороженный график после добавления слоев в модель Keras
  • 0CSS img вызывает проблемы
  • 0Jsoup, чтобы получить данные в блоке <b>
  • 0AngularJS: of-repeat, of-if & JSON
  • 1Как отделить символ валюты от денежной стоимости и сохранить десятичные дроби и запятые?
  • 0Как получить обновленный идентификатор строки в Java
  • 1Сборка колоды карт в Java с использованием 2 разных ENUMS
  • 1Проблемы разработки VoIP PBX
  • 1MetadataMBeanInfoAssembler не поддерживает динамические прокси JDK
  • 0Где настраивается версия продукта ID, корпорация и другая информация приложения в C ++
  • 0Удалить несколько выбранных строк DataTable одним щелчком мыши?
  • 0свойство переполнения для элементов с абсолютным позиционированием
  • 0Метод удаления C ++ AVLtree
  • 0Ионная сборка iOS удаляет изменения
  • 1Как украсить TableCellRenderer инструкциями, связанными с графикой?
  • 1Расположение провайдеров в Android?
  • 1Как нажать кнопку после успешного Ajax?
  • 1Как игнорировать разделитель CSV в кавычках?
  • 1Пустой канал в плагине страницы Facebook (встроенный виджет каналов)
  • 1Посылка событий клавиатуры программно не отправляет их во входы
  • 1Как вы фокусируете эмулятор Android разработчика?
  • 0Как непрерывно запускать скрипт PHP на сервере виртуального хоста?
  • 0Завершение неиспользуемых подключений http, которые являются результатом img ng-src
  • 0Два SQL-запроса в одном sql
  • 1То же действие по добавлению, но разные результаты в Javascript
  • 1Прото-сообщение, требующее использования параметра ref при попытке создать экземпляр
  • 1Использование pandas dataframe для записи значений в новую ошибку csv-файла
  • 1Похоже, плагин Android SDK сильно влияет на Eclipse
  • 0Проверка Jquery на содержание div
  • 0Почему индекс (по столбцу первичного ключа) не используется?
  • 0Вставка данных в таблицу MySQL из многоязычной HTML-формы через PHP
  • 0Как сделать директиву в контроллере?
  • 1Highcharts Синхронизированные графики с отсутствующими точками данных
  • 0Тип пользовательского поля Symfony2 и события формы при отправке
  • 1Скрыть ошибку без обходного пути
  • 0PHP генерирует категорию и подкатегорию из базы данных [дубликаты]
  • 1Получение ошибки исключения нулевой точки java.lang при обработке
  • 0Как использовать модель (дерево решений) в C / C ++, которая обучалась в R?
  • 1Есть ли необходимость в использовании обобщенных шаблонных шаблонов в методе сквозной передачи?

Сообщество Overcoder

Here I need to avoid null from datagridview (winform)

 private void SendUpdate()
        {
            
            if ((string)dataGridView1.SelectedRows[0].Cells[0].Value != string.Empty )
            {
                if (1 == dataGridView1.SelectedRows.Count)
                {
                    int Id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
                    Update up = new Update();
                    up.AssignValue(Id);
                    up.textBox1.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                    up.comboBox1.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                    up.textBox2.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                    up.textBox3.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
                    up.textBox4.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
                    up.textBox5.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString();
                    up.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Please Select the Single Data Which Required to Update");
                }
            }
            else 
            {

                MessageBox.Show("You Select the empty Row");

            }
            
        }

enter image description here

I had try !=string.empty; , !=null; , !="";
but error not solved.

1 == dataGridView1.SelectedRows.Count it true

But

(string)dataGridView1.SelectedRows[0].Cells[0].Value have null value
Show error

System.NullReferenceException: ‘Object reference not set to an instance of an object.’

System.Windows.Forms.DataGridViewCell.Value.get returned null.

Technical Problem Cluster First Answered On
October 7, 2020

Popularity
8/10

Helpfulness
4/10

System.Windows.Forms.DataGridView.CurrentRow.get returned null. c#


Popularity

6/10 Helpfulness
4/10
Language
python

Helpful Hyena

Contributed on Oct 07 2020

Helpful Hyena

4 Answers  Avg Quality 5/10


System.Windows.Forms.DataGridView.CurrentRow.get returned null. c#


Popularity

6/10 Helpfulness
4/10
Language
csharp

Helpful Hyena

Contributed on Oct 07 2020

Helpful Hyena

4 Answers  Avg Quality 5/10


System.Windows.Forms.DataGridView.CurrentRow.get returned null. c#


Popularity

4/10 Helpfulness
1/10
Language
csharp

Helpful Hyena

Contributed on Oct 07 2020

Helpful Hyena

4 Answers  Avg Quality 5/10


Like this post? Please share to your friends:
  • System windows data error 40 bindingexpression path error
  • System windows controls image system drawing image
  • System volume information что это за папка на флешке windows 10
  • System volume information отсутствует на windows 10
  • System volume information отказано в доступе windows 10