2013-12-04 1 views
-1

Вот мой текущий код для события OnRowUpdating и инструкции SQL для обновления базы данных. Это бросает исключение:Я не могу заставить мой Gridview обновить мою базу данных SQL Server

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

Код:

protected void GV_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    TextBox txtSu = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox1"); // each textbox refers to the Am then Pm day 
    TextBox txtSu1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox2");// sun pm 
    TextBox txtMo = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox3");// mon am 
    TextBox txtMo1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox4");//mon pm 
    TextBox txtTu = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox5"); 
    TextBox txtTu1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox6"); 
    TextBox txtWe = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox7"); 
    TextBox txtWe1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox8"); 
    TextBox txtTh = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox9"); 
    TextBox txtTh1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox10"); 
    TextBox txtFr = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox11"); 
    TextBox txtFr1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox12"); 
    TextBox txtSa = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox13"); 
    TextBox txtSa1 = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox14"); 

    string sql = "UPDATE tblEMPLOYEE SET [email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected], " + 
            "[email protected] " + 
            "WHERE [email protected]"; 
    CMethods.executeNonQuery(sql, "@ID", txtID.Text, "@AvSu", txtSu.Text, "@AvSu1", txtSu1.Text, "@AvMo", txtMo.Text, "@AvMo1", txtMo1.Text, "@AvTu", txtTu.Text, "@AvTu1", txtTu1.Text, "@AvWe", txtWe.Text, "@AvWe1", txtWe1.Text, "@AvTh", txtTh.Text, "@AvTh1", txtTh1.Text, "@AvFr", txtFr.Text, "@AvFr1", txtFr1.Text, "@AvSa", txtSa.Text, "@AvSa1", txtSa1.Text, "@ID", ID); 
    GV.EditIndex = -1; 
    fillUsers(); 
} 
private void fillUsers() 
{ 
    GV.DataSource = CMethods.returnTable("SELECT * FROM tblEMPLOYEE WHERE EmployeeID=" + lblEmployee.Text); 
    GV.DataBind(); 
} 

В Cmethods

public static class CMethods 
{ 
    public static DataTable returnTable(String CommandText, params Object[] values) 
    { 
     SqlConnection con = 
     new SqlConnection(ConfigurationManager.ConnectionStrings["Provider"].ConnectionString); 
     SqlCommand cmd = new SqlCommand(CommandText, con); 
     for (int i = 0; i < values.Length; i += 2) 
     { 
      cmd.Parameters.AddWithValue((String)values[i], values[i + 1]); 
     } 
     DataSet ds = new DataSet(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(ds, "tbl"); 
     return ds.Tables["tbl"]; 
    } 

public static bool executeNonQuery(String CommandText, params Object[] values) 
{ 
    bool bln = true; 
    SqlConnection con = 
    new SqlConnection(ConfigurationManager.ConnectionStrings["Provider"].ConnectionString); 
    SqlCommand cmd = new SqlCommand(CommandText, con); 
    for (int i = 0; i < values.Length; i += 2) 
    { 
     cmd.Parameters.AddWithValue((String)values[i], values[i + 1]); 
    } 
    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     bln = false; 

    } 
    finally 
    { 
     con.Close(); 
    } 
    return bln; 
} 
public static double returnValue(string str) 
{ 
    double dblTemp = 0.0D; 
    string strTemp = String.Empty; 
    bool blnFirstDec = false; 
    bool blnFirstNeg = false; 

    for (int i = 0; i < str.Length; i++) 
    { 
     if (str.Substring(i, 1) == "-") 
     { 
      blnFirstNeg = true; 
     } 
     if (IsNumeric(str.Substring(i, 1)) || str.Substring(i, 1) == ".") 
     { 
      if (str.Substring(i, 1) == ".") 
      { 
       if (!blnFirstDec) 
       { 
        blnFirstDec = true; 
        strTemp += "."; 
       } 
      } 
      else 
      { 
       strTemp += str.Substring(i, 1); 
      } 
     } 
    } 
+0

не показывает Вам все части в код. Например, мы не знаем, что такое CMethods или что делают fillUsers()? Кроме того, таким образом вы используете executeNonQuery, является необычным. Трудно догадаться, что не так, как вы показали. – NoChance

+0

Важная часть заключается в том, как работает ваш метод 'CMethods.executeNonQuery'. Включите это в свой вопрос, пожалуйста. – Corey

+0

И, пожалуйста, также скажите ** ГДЕ ТОЧНО ** (какая строка кода) это исключение происходит ..... –

ответ

0

Элемент управления FindControl может не возвращать управление, если вы не указали правильный идентификатор управления

, например, вы дали txtBo13 (отсутствует x), но на самом деле вы можете иметь txtBox13,

так ниже код возврата нуль для txtSa

TextBox txtSa = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBo13"); 

при вызове Text свойство txtSa вы получите NullReferenceException

, если вы указали ID как txtBox13, измените код в соответствии с у

TextBox txtSa = (TextBox)GV.Rows[e.RowIndex].FindControl("txtBox13"); 

А также вы можете забыли установить значение, @student параметр

+0

Спасибо, что избавил меня от ошибки NullReferenceException, и мой код теперь работает без ошибок, но теперь, когда я нажимаю Обновить значения для текстового поля, которое я редактирую в моем gridview, не обновляюсь. Я отправлю обратно с еще одним кодом – Charles

+0

@ user3064123 you забыл отправить параметр '@ student' методу' executeNonQuery' – Damith

+0

Я только что изменил его на EmployeeID, так как это было неправильное имя. Я также обновлю код здесь, но нет необходимости отправлять идентификатор, потому что у меня нет сделал этот элемент редактируемым. Я использую его только для того, чтобы сообщить базе данных, где обновить в своем SQL-заявлении, нужно ли это в командной строке безрезультатно? – Charles

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