e.item.cells[] 怎么用

biwei_cn 2008-12-14 07:20:04
有一个DataGrid 控件,总共有6列,第6列是模板列,且模板列里面放了一个LinkButton控件,ID是 LinkButton1,
我想访问他,并操作他.我在 ItemDataBound事件中,我写成下面的形式,

LinkButton lbt2 = (LinkButton)e.Item.Cells[5].FindControl("LinkButton1");
if (lbt2 != null)
{
lbt2.Text = "hello!";
lbt2.Attributes.Add("onclick", "return confirm('kkek1')");
}

执行结果和预期的一样, LinkButton1 的 text 显示成了 "hello!",且在点击时有这个弹出提示;
但是有一个问题是:在以上代码的 Cells[n]里面,n除了填5 以外, Cells[0]到 Cells[4]都能执行下在的语句,
按理说只能是 第6列,就就是索引为5的才能执行下面的语句,现在出现了这样的情况,是怎么回事呢?

难道是我对e.item.Cells[] 的理解有误吗?
我的理解是:cell[]代表列或单元格的索引,控件是在第6列,就应该是 cells[5]


有人说要加 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
条件, 但这是不用的,我也试过.
...全文
1638 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxiaoxiaoxi 2011-11-24
  • 打赏
  • 举报
回复
冒昧的问一下,e是干嘛用的,是什么意思?
kaizi_sun 2011-03-24
  • 打赏
  • 举报
回复
mark xia 回头可以学习
beikehanbao23 2008-12-15
  • 打赏
  • 举报
回复
a
beikehanbao23 2008-12-15
  • 打赏
  • 举报
回复
a
taz01 2008-12-15
  • 打赏
  • 举报
回复
应该在它的ItemCreate事件里面写
不是在temDataBound
biwei_cn 2008-12-15
  • 打赏
  • 举报
回复
总结一下吧, 都不是原因, 原因是 e.item.cells[n].controls[n]
controls[]方法只能用在非模板列,模板列,只能用cells[].findcontrol["id"]
biwei_cn 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 beikehanbao23 的回复:]
a
[/Quote]我晕,这小伙子用 a 来回复我, 太不给面子了吧.
biwei_cn 2008-12-14
  • 打赏
  • 举报
回复
晕,1就是第二个控件.0是第一个控件。现在我只有一个控件呀,用0为有错误,用1都会正常呀.
mengxj85 2008-12-14
  • 打赏
  • 举报
回复
好好学习,向sp1234学习
jiang_jiajia10 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 biwei_cn 的回复:]
我要是改成


e.item.cells[5].controls[0]可以访问.
但是用e.item.cells[5].controls[1]不可以,

怎么回事.郁闷

提示问题说,Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.LinkButton'.
[/Quote]
1就是第二个控件.0是第一个控件。
biwei_cn 2008-12-14
  • 打赏
  • 举报
回复
我要是改成


e.item.cells[5].controls[0]可以访问.
但是用e.item.cells[5].controls[1]不可以,

怎么回事.郁闷

提示问题说,Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.LinkButton'.
jiang_jiajia10 2008-12-14
  • 打赏
  • 举报
回复

LinkButton lbt = (LinkButton)(e.Item.Cells[5].Controls[0])
if (lbt2 != null)
{
lbt2.Text = "hello!";
lbt2.Attributes.Add("onclick", "return confirm('kkek1')");
}

hdsharp 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 jiang_jiajia10 的回复:]
sp1234的回复已经解释的很好了,LZ好好看看吧
[/Quote]

确实!!学习了。。//
jiang_jiajia10 2008-12-14
  • 打赏
  • 举报
回复
sp1234的回复已经解释的很好了,LZ好好看看吧
xixi9x 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sp1234 的回复:]
e.Item.Cells[5].FindControl("LinkButton1")

这并不是只查询Cells[5]下面的子控件,而且也不一定能够去查找Cells[5]下面的所有子控件。

例如子控件中有一个DataList控件,那么它就阻止你的这个查询深入其内部去查询了,这是因为DataList是一个实现了INamingContainer接口的控件。而从Cells[5]能够查询到其它Cells[x]中的子控件,就是因为查询首先上溯到 e.Item,发现它是一个实现了 INamingContainer 接口的控件,于是遍…
[/Quote]

呵呵,难道我想写成这种形式,不可以吗?

e.Item.Cells[5].Controls[0];
但是我不明白Controls[n]中 n的含义,如果cell[5]也就是第六列里面有很多控件,
且有不同类型重复的控件呢,这种秩序是按相同类型的控件的秩序来计算,还是按所有类型的控件的先后顺序来算呢?
biwei_cn 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyq11 的回复:]
if(e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[5].Attributes.Add("onclick", "return confirm('')");
}
[/Quote]
呵呵,一看到 Row不同于Item 就知道是GridView 里面的东西.
biwei_cn 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhiaini 的回复:]
你其他单元格有放LINKBUTTON没?
[/Quote]
我其它单元格是没放任何控件的,且不是模板列;只有在第六列加的模板列,里面放的这个LinkButton控件.

以上这个问题解决了,但是在利用FindControl方法找的它!但是有没有其它写法,比如写在 e.item.cells[5].controls[n];其实这个controls 也一直不知道怎么用的.n的值的用法, 会的人,提示一下,谢谢!
biwei_cn 2008-12-14
  • 打赏
  • 举报
回复
很好,这位仁兄..

总结一下,失误的原因,是对 FindControl 功能的理解不够深入.

谢谢,提示,继续学习了!
  • 打赏
  • 举报
回复
呵呵,最后打一个直观比方。你在编写cs代码过程中总是会创立class吧!在同一个命名空间中,不允许有两个独立的class名字重复的。但是在不同的命名空间中,class名是可以重复的。当你编写代码时,编译器是根据完整的命名空间路径去区分名称重复的class的。
  • 打赏
  • 举报
回复
它把内外部控件的ID命名控件隔绝开来 --> 它把内外部控件的ID命名空间隔绝开来
加载更多回复(12)
1. 打开新的窗口并传送参数: 传送参数: response.write("<script>window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&id1;="+...+"’)</script>") 接收参数: string a = Request.QueryString("id"); string b = Request.QueryString("id1"); 2.为按钮添加对话框 Button1.Attributes.Add("onclick","return confirm(’确认?’)"); button.attributes.add("onclick","if(confirm(’are you sure...?’)){return true;}else{return false;}") 3.删除表格选定记录 int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex]; string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString() 4.删除表格记录警告 private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e) { switch(e.Item.ItemType) { case ListItemType.Item : case ListItemType.AlternatingItem : case ListItemType.EditItem: TableCell myTableCell; myTableCell = e.Item.Cells[14]; LinkButton myDeleteButton ; myDeleteButton = (LinkButton)myTableCell.Controls[0]; myDeleteButton.Attributes.Add("onclick","return confirm(’您是否确定要删除这条信息’);"); break; default: break; } } 5.点击表格行链接另一页 private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { //点击表格打开 if (e.Item.ItemType == ListItemType.Item e.Item.ItemType == ListItemType.AlternatingItem) e.Item.Attributes.Add("onclick","window.open(’Default.aspx?id=" + e.Item.Cells[0].Text + "’);"); } 双击表格连接到另一页 在itemDataBind事件中 if(e.Item.ItemType == ListItemType.Item e.Item.ItemType == ListItemType.AlternatingItem) { string OrderItemID =e.item.cells[1].Text; ... e.item.Attributes.Add("ondblclick", "location.href=’../ShippedGrid.aspx?id=" + OrderItemID + "’"); } 双击表格打开新一页 if(e.Item.ItemType == ListItemType.Item e.Item.ItemType == ListItemType.AlternatingItem) { string OrderItemID =e.item.cells[1].Text; ... e.item.Attributes.Add("ondblclick", "open(’../ShippedGrid.aspx?id=" + OrderItemID + "’)"); } ★特别注意:【?id=】 处不能为 【?id =】 .......
经典的购物车系统: 关键词: Internet 网上书店开发 购书系统 开发一套网上购书系统,可以让顾客通过浏览器浏览网站售书目录,从而挑选自己满意的图书,并下订单购买。而网站后台人员需要维护网站会员信息、书籍信息以及订单信息。本系统的目的就是要开发一套既方便客户网上购书,又方便网站维护人员维护网站WEB服务系统。 用户信息显示: protected void Button1_Click(object sender, EventArgs e) { Book book =new Book(); DetailsViewRowCollection rows=DetailsView1.Rows; book.Bookname = rows[1].Cells[1].Text; book.Bookid =(String)rows[0].Cells[1].Text; book.Introduce = rows[8].Cells[1].Text; CartItem item = new CartItem(); item.Book = book; item.Quantity = Int32.Parse(TextBoxQuerty.Text); Profile.ShoppingCart.AddItem(item); Response.Redirect(@"~\products\CartInfor.aspx"); Labelnfor.Text ="Bookname"+ item.Book.Bookname+"
数量:"+item.Quantity; } 订单生成: protected void Page_Load(object sender, EventArgs e) { ShowInfor(); } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect(@"~\products\BookInforByCatalog.aspx"); } private void ShowInfor() { ListBox1.Items.Clear(); CartItem[] items = Profile.ShoppingCart.GetAllItems(); for (int i = 0; i < items.Length; ++i) { CartItem item =items[i]; String str = String.Format("Bookname:{0} Quantity:{1}",item.Book.Bookname,item.Quantity); ListBox1.Items.Add(str); } } protected void Button3_Click(object sender, EventArgs e) { ListBox1.Items.Remove(ListBox1.Items[index]); } protected void Button4_Click(object sender, EventArgs e) { ListBox1.Items.Clear(); } protected void Button2_Click(object sender, EventArgs e) { } }

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧