当前位置:编程学习 > C#/ASP.NET >>

在ItemDataBound事件中遍历datalist的每一项

无法遍历到最后一项. --------------------编程问答-------------------- 贴代码! --------------------编程问答-------------------- 请楼主贴代码 --------------------编程问答-------------------- for (int i = 0; i < this.DataList1.Items.Count; i++)
        {
            string value = ((Label)this.DataList1.Items[i].FindControl("price")).Text;
            double  price = Convert.ToDouble(value);
            int count = Convert.ToInt32(((TextBox)this.DataList1.Items[i].FindControl("txtCount")).Text);
            ((Label)this.DataList1.Items[i].FindControl("total")).Text = Convert.ToString(price * count);
            theTotal = theTotal + price * count;
        }
--------------------编程问答-------------------- 在ItemDataBound事件中 --------------------编程问答-------------------- 是否是调试看到它没有遍历到最后一页,只是第一页而已?
就是这样,不知为什么,实际上已遍历了全部的数据. --------------------编程问答-------------------- 是阿,前几天就遇到这个问题了,取不到最后一项 --------------------编程问答-------------------- 赋不上值 --------------------编程问答-------------------- 用foreach

foreach   (DateListItem   dl   in   DataList1.Items)
{
//code
}
--------------------编程问答-------------------- 先去好好了解一下ItemDataBound事件。 --------------------编程问答-------------------- 怎么取不到值了?实际上已经遍历了 --------------------编程问答--------------------
if(e.Item.ItemType != ListItemType.Header)
{
//加上这句,难道是把标题也遍历了
}
--------------------编程问答-------------------- 不行呢,给每项赋值就是最后一项没有值 --------------------编程问答--------------------

if(e.Item.ItemType==ListItemType.Item)
{
string value = ((Label)e.Item.FindControl("price")).Text; 
            double  price = Convert.ToDouble(value); 
            int count = Convert.ToInt32(((TextBox)e.Item.FindControl("txtCount")).Text); 
            ((Label)e.Item.FindControl("total")).Text = Convert.ToString(price * count); 
            theTotal = theTotal + price * count; 
}


试试 --------------------编程问答-------------------- 你最后一行是页脚吧? --------------------编程问答--------------------

if(e.Item.ItemType == ListItemType.Item || 
          e.Item.ItemType == ListItemType.AlternatingItem)
{
string value = ((Label)e.Item.FindControl("price")).Text; 
            double  price = Convert.ToDouble(value); 
            int count = Convert.ToInt32(((TextBox)e.Item.FindControl("txtCount")).Text); 
            ((Label)e.Item.FindControl("total")).Text = Convert.ToString(price * count); 
            theTotal = theTotal + price * count; 
}

//刚才少写了e.Item.ItemType == ListItemType.AlternatingItem

--------------------编程问答-------------------- 都写在item里了啊 --------------------编程问答-------------------- 不行啊,那些方法都不行 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
引用 15 楼 criedshy 的回复:
C# codeif(e.Item.ItemType== ListItemType.Item|| 
          e.Item.ItemType== ListItemType.AlternatingItem)
{string value= ((Label)e.Item.FindControl("price")).Text;double  price= Convert.ToDouble(valu¡­

顶 --------------------编程问答-------------------- 无语,ItemDataBound事件是指每行数据绑定后执行的,你根本没理解它的作用和过程。
假设你数据源一共有3行,你现在刚绑定一行,那么ItemDataBound事件里的那个循环,怎么可能会跳到第二行呢???那时对于datalist来说,行数为1啊~,只有在绑定最后行的时候datalist才是3行,你明白不? --------------------编程问答-------------------- 应该写在DataBound里 --------------------编程问答-------------------- MSDN的解释:当项被数据绑定到 DataList 控件后,将引发 ItemDataBound 事件。此事件为您提供了在客户端显示数据项之前访问该数据项的最后机会。当引发此事件后,该数据项不再可用。

--------------------编程问答-------------------- 学习 --------------------编程问答-------------------- ItemDataBound 事件中,每次绑定一行执行一次ItemDataBound事件的,你那循环放那里用不上的吧?如果你要在ItemDataBound 里面操作,最好在声明了控件以后,加上if(xxx!=null)这个判断
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,