执行到"dr[i][0] = (tsd.GetSwimmer()).name;"一句时
系统提示"未处理的“System.NullReferenceException”类型的异常出现在 AdapterPatternTest.exe 中。其他信息: 未将对象引用设置到对象的实例。"请问各位高手是什么问题???
private void CLONE_Click(object sender, System.EventArgs e)
{
swimData tsd = (swimData)this.sd.Clone();
DataTable tb = new DataTable("swimmer");
tb.Columns.Add((new DataColumn("name",typeof(string))));//执行到这里就有问题.
tb.Columns.Add((new DataColumn("ID",typeof(int))));
tb.Columns.Add((new DataColumn("club",typeof(string))));
tb.Columns.Add((new DataColumn("score",typeof(float))));
tb.Columns.Add((new DataColumn("age",typeof(int))));
tb.Columns.Add((new DataColumn("gender",typeof(string))));
DataRow[] dr = new DataRow[tsd.GetList().Count];
tsd.MoveFirst();
for(int i=0;i<tsd.GetList().Count;i++)
{
dr[i][0] = (tsd.GetSwimmer()).name;
dr[i][1] = (tsd.GetSwimmer()).ID;
dr[i][2] = (tsd.GetSwimmer()).club;
dr[i][3] = (tsd.GetSwimmer()).score;
dr[i][4] = (tsd.GetSwimmer()).age;
dr[i][5] = (tsd.GetSwimmer()).gender;
    tb.Rows.Add(dr[i]);
}
this.dataGrid1.DataSource = tb;
}

解决方案 »

  1.   

    不好意思,打错了,是执行到下面的"dr[i][0] = (tsd.GetSwimmer()).name;"出了问题.
      

  2.   

    应该是tsd.GetSwimmer()).name为空引起的,判断一下它是不是为空就可以了
      

  3.   

    for(int i=0;i<tsd.GetList().Count;i++)
    {
                                      if(tsd.GetSwimmer() != null )
                                      {
    dr[i][0] = (tsd.GetSwimmer()).name;
    dr[i][1] = (tsd.GetSwimmer()).ID;
    dr[i][2] = (tsd.GetSwimmer()).club;
    dr[i][3] = (tsd.GetSwimmer()).score;
    dr[i][4] = (tsd.GetSwimmer()).age;
    dr[i][5] = (tsd.GetSwimmer()).gender;
        tb.Rows.Add(dr[i]);
                                       }
      

  4.   

    表有了,列有了,行还没有,虽然你明了DataRow数组,DataRow里面还没有行,在循环体内先写一行:
    dr[i] = tb.NewRow();
      

  5.   

    还是有问题,加了"tb.NewRow();"以后还是出现最开始的问题,只是问题出在以下哪一行是不定的.                                 
     dr[i][0] = (tsd.GetSwimmer()).name;
    dr[i][1] = (tsd.GetSwimmer()).ID;
    dr[i][2] = (tsd.GetSwimmer()).club;
    dr[i][3] = (tsd.GetSwimmer()).score;
    dr[i][4] = (tsd.GetSwimmer()).age;
    dr[i][5] = (tsd.GetSwimmer()).gender;
      

  6.   

    dr[i] = tb.NewRow();是肯定要加的,不然.net怎么知道你的DataRow里有几列。
    dr[i][j]是对象dr[i]里的ItemArray数组对应的各列数据。
    先加一行:
    MessageBox.Show((tsd.GetSwimmer()).name);
    看出不出错!
      

  7.   

    回去看看dr[i][0] 的定义对否。你的数组定义肯定错了。