日期:2014-05-18  浏览次数:20448 次

GridView1_RowDeleting事件中怎样取得当前行每个列的值?
谢谢

------解决方案--------------------
GridView1.Rows[e.RowIndex]["ColumnName"]
------解决方案--------------------
GridView1.Rows[GridView1.SelectedIndex].Cells[1].Text;
------解决方案--------------------
如果有模板列,如:
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UnitPrice") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
Label lbl = (Label)row.FindControl("Label1");

Page.ClientScript.RegisterStartupScript(this.GetType(), "scriptKey", "alert('" + lbl.Text + "');", true);
e.Cancel = true; //取消删除

}
------解决方案--------------------
探讨
引用:
GridView1.Rows[GridView1.SelectedIndex].Cells[1].Text;

不行,SelectedIndex为-1

------解决方案--------------------
探讨
有模版列checkbox1;
TextBox1.Text =((TextBox) GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text.ToString();
或者TextBox1.Text = GridView1.Rows[e.RowIndex].Cells[2].Text.ToString();

为什么这样取不到值?

------解决方案--------------------
是啊,都不行,模板列里放的是checkbox,然后取的是TextBox,行才怪了。

------解决方案--------------------
楼主啊,你要的一当前行中的所有列的值,晕死,这所有的列太多了,我也不好说

你看得懂3楼的话,应该可以自己写了

如果不是模板中的,不用FindControl("Label1"); 

直接((TextBox) GridView1.Rows[e.RowIndex].Cells[2].Controls[0])

我只说到这!!


------解决方案--------------------
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 

GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
这个已得到了当前行的实例了,你想取它的啥子不得啊!!!

你自己看11楼的回复
------解决方案--------------------
你在GridView中找DataKeyNames属性,将你需要的字段填写,然后在事件中使用以下内容就可以
string id = GridView1.DataKeys[e.RowIndex].Values[0].ToString();
string name = GridView1.DataKeys[e.RowIndex].Values[2].ToString();/
------解决方案--------------------
还没解决?

哪,我最后再说一次了,再不行,你就再等别人来回答吧

如果有模板列,如: 
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice"> 
<ItemTemplate> 
<asp:Label ID="Label1" runat="server" Text=' <%# Bind("UnitPrice") %>'> </asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 

GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
Label lbl = (Label)row.FindControl("Label1"); //控件放到模板<asp:TemplateField 时用的方法

//如果不是放到模板中,则用Label lbl(Label) row.Cells[2].Controls[0]; 


请你自己注意了,现在只是举例,真正转换时,要根据你自己的情况转换,比如,前不是转换为Label(删除事件一般都是转成这个),和TextBox(这个一般用于编辑更新),而是转为CheckBox,请自己转换成相应的控件!!

还有就是GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).里的Cells[2]这个索引2,代表着第三列,因为从0开始,如果不行,你自己试着改,从0改到100000000,只要你不觉得烦;