protected void CreateDataGrid() 
{  
DataGrid1.AutoGenerateColumns=false;//不启用自动生成列 
DataGrid1.CssClass="border";//边框样式 
DataGrid1.BorderWidth=0; 
DataGrid1.CellSpacing=1; 
DataGrid1.CellPadding=5; 
DataGrid1.ItemStyle.CssClass="item";//普通列样式 
DataGrid1.HeaderStyle.CssClass="header";//头样式 
DataGrid1.PagerStyle.CssClass="header";//页脚样式 
DataGrid1.DataKeyField="stuid";//主键字段 
DataGrid1.AllowPaging=true;//允许分页 
DataGrid1.PageSize=5;//分页大小 
DataGrid1.PagerStyle.Mode=PagerMode.NumericPages;//数字形式分页 
EditCommandColumn ecc=new EditCommandColumn();//更新按钮列 
ecc.ButtonType=ButtonColumnType.PushButton;//下压按钮 
ecc.EditText="编辑"; 
ecc.CancelText="取消"; 
ecc.UpdateText="更新";
//按钮文字 
DataGrid1.Columns.Add(ecc);//增加按钮列 
DataGrid1.EditCommand+=new DataGridCommandEventHandler(DataGrid1_EditCommand); 
DataGrid1.UpdateCommand+=new DataGridCommandEventHandler(DataGrid1_UpdateCommand); 
DataGrid1.CancelCommand+=new DataGridCommandEventHandler(DataGrid1_CancelCommand);//更新、取消、编辑事件注册 
ButtonColumn bc=new ButtonColumn(); 
bc.ButtonType=ButtonColumnType.PushButton; 
bc.CommandName="del"; 
bc.Text="删除";
DataGrid1.Columns.Add(bc); 
DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(DataGrid1_PageIndexChanged);//分页事件注册,这里需要注意注册事件代码的位置,不能放到BindGrid()中 
SetBind();   //绑定数据 

protected void BindGrid() 
{    
TemplateColumn tm=new TemplateColumn(); 
tm.ItemTemplate=new ColumnTemplate1();//普通列 
tm.EditItemTemplate=new ColumnTemplate2();//编辑列 
tm.HeaderText="姓名"; 
DataGrid1.Columns.AddAt(0,tm);//在第一列增加第一个模板列 
TemplateColumn tm2=new TemplateColumn(); 
tm2.ItemTemplate=new ColumnTemplate3(); 
tm2.EditItemTemplate=new ColumnTemplate4(); 
tm2.HeaderText="学院"; 
DataGrid1.Columns.AddAt(1,tm2);//在第二列增加第一个模板列 
DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(DataGrid1_ItemDataBound);//数据绑定事件注册,这里需要注意注册事件代码的位置 
SetBind(); 
}  protected void SetBind() 

SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]); 
SqlDataAdapter da=new SqlDataAdapter("select * from stu,dep where stu.studepid=dep.depid",conn); 
DataSet ds=new DataSet(); 
da.Fill(ds,"stu"); 
this.DataGrid1.DataSource=ds.Tables["stu"]; 
this.DataGrid1.DataBind(); 
   
}  private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) 

SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]); 
SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn); 
DataSet ds=new DataSet(); 
da.Fill(ds,"table1"); 
if(e.Item.ItemType==ListItemType.EditItem) 

DropDownList ddl=(DropDownList)e.Item.FindControl("dep"); 
ddl.DataSource=ds.Tables["table1"]; 
ddl.DataTextField="depname"; 
ddl.DataValueField="depid"; 
ddl.DataBind(); 
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true; 
}
foreach(DataGridItem di in this.DataGrid1.Items) 
            { 
                if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem||di.ItemType==ListItemType.EditItem) 

                    ((Button)di.Cells[3].Controls[0]).Attributes.Add("onclick","return confirm('delete?');"); 
                } 
            }  } 为什么
if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem||di.ItemType==ListItemType.EditItem) 

                    ((Button)di.Cells[3].Controls[0]).Attributes.Add("onclick","return confirm('delete?');"); 
                } 
这个报错呀,提示index超出范围?什么原因呀?

解决方案 »

  1.   

    DataGrid的index是从0开始算的。
      

  2.   

    是呀,我得那个删除得button是在从0开始得第3个呀!
      

  3.   

    调试一下,看看哪个 Index 超出了范围或者试试 di.Cells[3].FindControl('Button ID')
      

  4.   

    FindControl('Button ID')
    这个id是变化的,不能用这种方法呀!
      

  5.   

    FindControl('Button ID')
    这个id是变化的,不能用这种方法呀!可以用的
    ID 确实是变化的,但你写的时候就一个
    比如你在 ItemTemplate 里写了一个 ID = button1 的 Button
    运行后可能生成 10 个按钮名称为 ctr_0_button1 ......... ctr_9_button1你用FindControl("button1")是可以找到的
    FindControl就是干这个用的
    如果是确定的ID就用 di.Cells[3].Controls[] 了
      

  6.   

    我用了wlzbaby(没病真好) 你的方法,可是还是不行呀!要不你把我的代码看看,
    在你的电脑上能用吗?
      

  7.   

    用了 FindControl 报什么错?
      

  8.   

    把具体报错信息贴出来用 FindControl 不应该报 Index 超出了范围没用 Index 定位