Member 14954114 Ответов: 2

Пожалуйста, найдите решение этого вопроса, как я могу размножаться....


когда я запускаю программу, она показывает ошибку..... object refence not set

Что я уже пробовал:

public void Multiply()
       {
           foreach (GridViewRow row in GridView1.Rows)
           {
               TextBox TextBox1 = (TextBox)row.FindControl("SrNO");
               TextBox TextBox2 = (TextBox)row.FindControl("productname");
               TextBox TextBox3 = (TextBox)row.FindControl("Quntity");
               TextBox TextBox4 = (TextBox)row.FindControl("Rate");
               TextBox TextBox5 = (TextBox)row.FindControl("Total");

             //  string SrNO = TextBox1.Text;
              // string ProductID = TextBox2.Text;
            //   string Quntity = TextBox3.Text;
            //   string Rate = TextBox4.Text;
            //   string TotalAmount = TextBox5.Text;

               int a, b;
               bool isAValid = int.TryParse(TextBox3.Text, out a);
               bool isBValid = int.TryParse(TextBox4.Text, out b);

               if (isAValid && isBValid)
                   TextBox5.Text = (a * b).ToString();
               else
                   TextBox5.Text = "Invalid input";
           }
       }

Richard MacCutchan

Вы уверены, что ваши текстовые поля находятся в элементе управления GridView?

F-ES Sitecore

Какая строка выдает ошибку?

2 Ответов

Рейтинг:
1

Sandeep Mewara

Подробности об ошибке вы видите: Класс NullReferenceException (System) | Microsoft Docs[^]

Цитата:
Исключение NullReferenceException возникает при попытке доступа к члену типа, значение которого равно null

Возможно потому что:
1. Вы забыли создать экземпляр ссылочного типа
2. Вы забыли измерить массив перед его инициализацией.
3. Вы получаете нулевое возвращаемое значение из метода, а затем вызываете метод для возвращаемого типа.
4. Вы используете выражение (например, связываете список методов или свойств вместе) для получения значения
5. Вы перечисляете элементы массива, который содержит ссылочные типы, и ваша попытка обработать один из элементов вызывает
6. исключение создается методом, который передается null


Следующее поможет вам узнать об отладке:
Учебник: отладка кода Visual Basic - Visual Studio | Microsoft Docs[^]
Первый взгляд на отладчик - Visual Studio | Microsoft Docs[^]

При отладке вы сможете получить точную строку, где переменная равна нулю и возникает ошибка.
Для вас я подозреваю ошибку из нижней части кода:
TextBox TextBox1 = (TextBox)row.FindControl("SrNO");
TextBox TextBox2 = (TextBox)row.FindControl("productname");
TextBox TextBox3 = (TextBox)row.FindControl("Quntity");
TextBox TextBox4 = (TextBox)row.FindControl("Rate");
TextBox TextBox5 = (TextBox)row.FindControl("Total");
Если какой-либо один findcontrol терпит неудачу (из-за неправильного регистра имени или около того), последующий код, ожидающий текстовое поле как действительный элемент управления, будет бомбить во время использования .Свойство text. Хотя, учитывая, что вы кажетесь новым и не поделились ни трассировкой стека ошибок, ни всем кодом, ошибка может исходить откуда-то еще.

Попробуйте.


Member 14954114

нет не работает братан плз добавь решение

Chris Copeland

Как упоминал Сандип Мевара, вы пробовали отлаживать код и проходить через него построчно, чтобы увидеть, какие переменные являются нулевыми? Это не то, что мы можем сделать для вас, вы должны сделать это сами.

Sandeep Mewara

@OriginalGriff объясняет, как показано ниже:

You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterdays shirt when you took it off last night.

We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!

Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
But you can - and your IDE will help you here. Run your program in the debugger and when it fails, VS will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, VS will stop before the error, and let you examine what is going on by stepping through the code looking at your values.

But we can't do that - we can't run your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out! 

BillWoodruff

Если вы процитировали это: https://stackoverflow.com/a/4660186/133321

Вы могли бы иметь еще больше слов в неделю.

BillWoodruff

С моей точки зрения, вырезанные и вставленные ответы, подобные этому, не имеющие прямого отношения к контексту ОП, не добавляют никакой ценности обсуждению. Они просто способствуют раздуванию, которое забивает QA. Больше слов не обязательно означает больше ценности.

Рейтинг:
1

BillWoodruff

вы уверены, что каждая строка-это DataRow ?

// ряд.RowType == ch .DataRow;

Ошибка Проверьте свои результаты findcontrol:

TextBox TextBox1 = (TextBox)row.FindControl("SrNO");
if(TextBox1 == null)
{
     throw new NullReferenceException(
}
Или оберните доступ в блок Try-Catch:
try
{
   TextBox TextBox1 = (TextBox)row.FindControl("SrNO");
   TextBox TextBox2 = (TextBox)row.FindControl("productname");
   TextBox TextBox3 = (TextBox)row.FindControl("Quntity");
   TextBox TextBox4 = (TextBox)row.FindControl("Rate");
   TextBox TextBox5 = (TextBox)row.FindControl("Total");
}
catch (NullReferenceExceptione nre)
{
    Console.WriteLine($"Control not found: '{row.Name}'");
}
Видеть: [^], [^]


Otekpo Emmanuel

Если у вас возникли ошибки, которые ссылаются не на объект, то очевидно, что вы используете неправильное имя для ссылки на конкретное текстовое поле в элементе управления GridView.

Поэтому лучшим и самым быстрым решением было бы проверить каждое текстовое поле по одному, чтобы увидеть то, которое выдаст ошибку

BillWoodruff

Код, который я опубликовал, показывает, как это сделать.