private void DataGrid1_ItemDataBound(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
for( int col=2;col<=3;col++) 

   TableCell oldtc = this.DataGrid1.Items[1].Cells[col]; 
   for(int i=2;i<20;i++) 
      { 
          TableCell tc = this.DataGrid1.Items[i].Cells[col]; 
          if(tc.Text == oldtc.Text) 
          { 
              tc.Visible = false; 
     if(oldtc.RowSpan == 0) 

     oldtc.RowSpan = 1; 
          } 
      oldtc.RowSpan = oldtc.RowSpan +1; 
      oldtc.VerticalAlign = VerticalAlign.Middle; 

else 

oldtc = tc; 


}    
并且在数据绑定时设置了datakeyfield
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();   
this.DataGrid1.DataKeyField ="ProductID";
但是运行时出现错误提示
索引超出范围。必须为非负值并小于集合大小。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 
行 103: for( int col=2;col<=3;col++) 
行 104: { 
行 105: TableCell oldtc = this.DataGrid1.Items[1].Cells[col]; 
行 106: for(int i=2;i<20;i++) 
行 107: { 
 
请大家指点啊 小弟快愁死了