2016-03-14 94 views
-3

我想通過「addRow」方法將數據發送到我的Provider類並操作數據表。當它去做的方法,我得到System.NullReferenceException任何建議,我知道它在dt.newRow()之前崩潰,所以一些如何datatable爲空?運行方法時空引用異常

class Provider 
    { 
    private DataTable dt; 
    private DataRow dataRow; 
    List<string> routes; 
    private int _routeCount; 
    private int count; 

    public int RouteCount 
    { 
     get { return _routeCount; } 

     set { _routeCount = value; } 

    } 

    private void Initial() 
    { 
     dt = new DataTable(); 
     dataRow = dt.NewRow(); 
     routes = new List<string>(); 
     _routeCount = 0; 
     count = 0; 

    } 

    /*We Edit the table and create itfrom our excel data we got earlier*/ 
    public DataTable Load(string table) 
    { 
     DataTable d = null; 
     dt = new DataTable(); 
     try 
     { 

      return d; 
     } 
     catch (Exception x) 
     { 
      MessageBox.Show(x.Message); 
      return dt; 
     } 
    } 

    public List<string> GetRoutes() 
    { 
     return routes; 
    } 

    public DataTable GetCustomers() 
    { 
     return dt; 
    } 

    public void addRow(string data) 
    { 
     Random rnd = new Random(); 
     Console.WriteLine("count = " + count); 
     //Getting Routes loaded 
     try 
     { 
      if(count == 0) 
      { 
       dataRow = dt.NewRow(); 
      } 
      switch (count) 
      { 
       case 0: 
        var maxC = Convert.ToInt32(999999999999); 
        var minC = Convert.ToInt32(100000000000); 
        dataRow["waybill"] = rnd.Next(minC, maxC) + ""; 
        break; 
       case 1: 
        dataRow["pieces"] = data; 
        break; 
       case 2: 
        dataRow["receiver"] = data; 
        break; 
       case 3: 
        dataRow["add"] = data; 
        break; 
       case 4 : 
        dataRow["number"] = data; 
        break; 


      } 

      if(count == 5) 
      { 
       dt.Rows.Add(dataRow); 
       count = 0; 
      } 
      count++; 

      // return 0; 
     } 
     catch (Exception x) 
     { 
      MessageBox.Show(x.Message +"Call that no good tech guuy of yours after you try what you just did again ^_^"); 
      // return 1; 
     } 
    } 


    public void addRoute(string route) 
    { 
     Console.WriteLine(routes); 
     if(routes != null) 
     { 

      routes.Add(route); 
      _routeCount = routes.Capacity; 
      // return 0; 
     } 



    } 

    public DataTable Loading(string request) 
    { 
     Console.WriteLine("sooooooo:" + request); 
     DataTable dTemp = null; 
     string searchExpression = "waybill = " + request; 
     DataRow[] foundRows = dt.Select(searchExpression); 

     dTemp = new DataTable(); 

     foreach(DataRow row in foundRows) 
     { 
      dTemp.Rows.Add(row); 
     } 
     try 
     { 

      return dTemp; 
     } 
     catch (Exception x) 
     { 
      MessageBox.Show(x.Message); 
      return dt; 
     } 
    } 




} 

}

+0

我只是把dt = new DataTable(); –

+0

作爲變量,我想初始化對象的初始方法並沒有運行,所以它仍然只是宣佈,但沒有分配任何奇怪的場景? –

+0

所以把「私人DataTable DT =新的DatTable()」固定它 –

回答

0

改了行

  Provider{ 
       private DataTable dt; 
      } 

  Provider{ 
       private DataTable dt= new dataTable(); 
      } 

如果您在inital方法遇到空引用不知何故,我想這是沒有被調用或I有方法錯誤。但是,它永遠不會被設置或不分配任何數據給它導致這個問題。