读书人

GridView1_RowDeleting事件中怎样取得

发布时间: 2012-04-02 19:58:59 作者: rapoo

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,只要你不觉得烦;


Controls[0]里的0一般不变,如果你这列中有多个控件,则可能不是第0个,自己搞清楚





}



如果上面你都确定试过了,还不行,那么,可能是:


Page.IsPostBack常见问题

也就是你在页面加载事件Page_Load(??)里给上面的数据绑定控件绑定的数据源,又没有放到非回调条件下时,有可能现以上错误,

如果真是这样,请把你的Page_Load(??)事件里的代码全部放到

if(!IsPostBack)
{
//原代码全部放到这里,如果你不懂的话
}
[解决办法]
嗯,对了,楼主,现在你是在删除事件,不是在更新事件,所以请把找到的控件转为Label控件,不要转为TextBox(编辑更新时才用),当然,如果是其它类型的,要转为相应的控件才行.

读书人网 >asp.net

热点推荐