Member 11765228 Ответов: 2

Ссылка на объект не указывает на экземпляр объекта в ASP .Чистая и DataGrid


Привет, ребята, я пытаюсь добавить значения в datagrid с помощью элемента управления Нижним колонтитулом, когда когда-либо я использую свой код, он дает мне ошибку ссылки на объект, не установленный на экземпляр объекта. во время выполнения. код, который я использую для добавления ценности, выглядит следующим образом:

protected void btn_Grid_add_Click(object sender, EventArgs e)
    {
        try
        {

            SqlDataSource1.InsertParameters["Parking_ID"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("txt_grid_PID")).Text;
            SqlDataSource1.InsertParameters["Date_In"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("txt_grid_DateIN")).Text;
            SqlDataSource1.InsertParameters["Date_Out"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("txt_grid_DateOUT")).Text;
            SqlDataSource1.InsertParameters["Amount"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("txt_Grid_Amout")).Text;
            SqlDataSource1.InsertParameters["Parking_Space"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("txt_grid_PS")).Text;
            SqlDataSource1.InsertParameters["VehicleNo"].DefaultValue = txt_vehicle_no.Text;
            SqlDataSource1.Insert();
        }
        catch(Exception ex)
        {
            Response.Write(ex.Message);
        }
    }


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

охраняемых недействительными btn_Grid_add_Click(объект отправителя, EventArgs в электронной)
{
пробовать
{

Sqldatasource1 на.InsertParameters ["Parking_ID"].Свойство DefaultValue = ((Текстовое Поле)Управления Gridview1.FooterRow.FindControl("txt_grid_PID")).Текст;
Sqldatasource1 на.InsertParameters ["Date_In"].Свойство DefaultValue = ((Текстовое Поле)Управления Gridview1.FooterRow.FindControl("txt_grid_DateIN")).Текст;
Sqldatasource1 на.InsertParameters ["Date_Out"].Свойство DefaultValue = ((Текстовое Поле)Управления Gridview1.FooterRow.FindControl("txt_grid_DateOUT")).Текст;
Sqldatasource1 на.InsertParameters ["Сумма"].Свойство DefaultValue = ((Текстовое Поле)Управления Gridview1.FooterRow.FindControl("txt_Grid_Amout")).Текст;
Sqldatasource1 на.InsertParameters ["Parking_Space"].Свойство DefaultValue = ((Текстовое Поле)Управления Gridview1.FooterRow.FindControl("txt_grid_PS")).Текст;
Sqldatasource1 на.InsertParameters ["VehicleNo"].DefaultValue = txt_vehicle_no. Text;
Sqldatasource1 на.Вставить();
}
поймать(исключение бывший)
{
Ответ.Запись (напр. сообщение);
}
}

Sergey Alexandrovich Kryukov

В каком направлении?
—СА

2 Ответов

Рейтинг:
2

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего такого, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать смотреть на различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего полного кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!


Рейтинг:
0

Sergey Alexandrovich Kryukov

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

Не беспокоиться. Это один из самых простых случаев для обнаружения и исправления. Это просто означает, что некоторый член / переменная некоторого ссылочного типа разыменовывается с помощью и своих экземпляров (нестатических) членов, что требует, чтобы этот член / переменная не была нулевой, но на самом деле она кажется нулевой. Просто запустите его в отладчике, он остановит выполнение, при котором возникает исключение. Поставьте точку останова на этой строке, перезапустите приложение и снова перейдите к этой точке. Оцените все ссылки, включенные в следующую строку, и посмотрите, какая из них пустая, хотя она не должна быть нулевой. После того, как вы это выясните, исправьте код: либо убедитесь, что член / переменная правильно инициализирована ненулевой ссылкой, либо проверьте ее на null и, в случае null, сделайте что-нибудь еще.

Пожалуйста, смотрите также: хотите отобразить следующую запись при нажатии кнопки. но получил ошибку в том случае, если условие следующей функции записи "ссылка на объект не установлена на экземпляр объекта".

Иногда вы не можете сделать это под отладчиком по той или иной причине. Один действительно неприятный случай - это когда проблема проявляется только в том случае, если программное обеспечение построено, когда отладочная информация недоступна. В этом случае вам придется использовать более сложный способ. Во-первых, вам нужно убедиться, что вы никогда не блокируете распространение исключений, обрабатывая их молча (это преступление разработчиков против самих себя, но очень обычное). Вам нужно поймать абсолютно все исключения на самом верхнем кадре стека каждого потока. Вы можете сделать это, если будете обрабатывать исключения этого типа System.Exception В обработчике вам нужно записать всю информацию об исключениях, особенно System.Exception.StackTrace:
http://msdn.microsoft.com/en-us/library/system.exception.aspx,
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx.

Трассировка стека - это просто строка, показывающая полный путь распространения исключения от оператора throw к обработчику. Читая его, всегда можно найти концы. Для ведения журнала лучше всего (в большинстве случаев) использовать класс System.Diagnostics.EventLog:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx.

Удачи,

—СА