首先我想说的是这是不可能的,我想很多人都用过这种方法教科书上也有!包括我在内我也用过你好好检查你的程序!我给出一段我的程序看看有什么区别!希望有帮助!祝好运!private void grdStat_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
TextBox name =(TextBox)e.Item.Cells[1].Controls[0];
TextBox description =(TextBox)e.Item.Cells[2].Controls[0];
if(id!=1&&id!=2){
if(!rda.EditStat(id,name.Text,description.Text)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.grdStat.EditItemIndex =-1;
this.BindGrid();
} private void grdStat_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
if(id!=1&&id!=2){
if(!rda.DeleteStat(id)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.BindGrid();
} private void grdStat_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex = e.Item.ItemIndex;
this.BindGrid();
} private void grdStat_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex =-1;
this.BindGrid();
}
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
TextBox name =(TextBox)e.Item.Cells[1].Controls[0];
TextBox description =(TextBox)e.Item.Cells[2].Controls[0];
if(id!=1&&id!=2){
if(!rda.EditStat(id,name.Text,description.Text)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.grdStat.EditItemIndex =-1;
this.BindGrid();
} private void grdStat_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
ResourceDataAccess rda = new ResourceDataAccess();
int id = Convert.ToInt16(e.Item.Cells[0].Text);
if(id!=1&&id!=2){
if(!rda.DeleteStat(id)){
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=编辑资源状态失败!");
}
}
else
this.Page.Response.Redirect("/WestSoftOA/Error.aspx?Info=前两个资源状态不能修改!");
this.BindGrid();
} private void grdStat_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex = e.Item.ItemIndex;
this.BindGrid();
} private void grdStat_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
this.grdStat.EditItemIndex =-1;
this.BindGrid();
}
其实获得数据就这个范例而已,如果是别的控件,把TextBox换个名字而已。
主要是你要找到对应的数据行和列。
中的Controls[0]才是要命的,记住。当你按下update的时候,DG的状态是Edit,此时的控件状态并不如你所想像,textbox就是Cell(1),此时的Cell中隐藏了两个控件,默认的浏览状态的控件为.Controls[0]。所以你提取不到值!
或者,用DG.Item.Findcontrol(),这样就不会有误解了!
this.Response.Write(id.ToString()); 出错 id 使用 int id=Convert.ToInt32(e.Item.Cells[1].Controls[0].ToString()) 报错 :输入字符串的格式不正确
不显示列,我不知道datagrid是否在运行期有数据
this.Response.Write(id.ToString()); 出错 id --------------------------->什么错误,,还有 TextBox id_1 不知道定义成相同的控件名字会不会出错
使用 int id=Convert.ToInt32(e.Item.Cells[1].Controls[0].ToString()) 报错 :输入字符串的格式不正确
-----------------------------------------》这一般不会对的,除非有(e.Item.Cells[1].Controls[0])控件是以 0-9的字符串命名的 ,一般字符串不能转化为int型
TextBox name= (TextBox)(e.Item.FindControl("name")); 不行