问一个RepeaterItem的问题

chenguang79 2008-08-05 11:27:34
我现在要根据ID的不同对Repeater里面的TextBox控件进行只读
我在
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{

DataRowView rowv = (DataRowView)e.Item.DataItem;
string ChannelID = rowv["ChannelID"].ToString();

IsView(ref Repeater1,true,e.Item.ItemIndex);




}

这里做了这个处理,就是通过验证进行处理,可是我在IsView里面写的就出错,
public void IsView(ref Repeater rep,bool flag,int itemindex)
{RepeaterItem items = rep.Items[itemindex]; //这里提示说索引超出范围。必须为非负值并小于集合大小。参数名: index
for(int i=0;i<item.Controls.Count;i++)
{

if(item.Controls[i].GetType().ToString().IndexOf("TextBox")!=-1)
{
//Response.Write("ttt");
((TextBox)item.Controls[i]).ReadOnly = true;
}


}



索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +91
System.Web.UI.WebControls.RepeaterItemCollection.get_Item(Int32 index) +10
Seaskyer.Modules.FdcSite.WebForm2.IsView(Repeater& rep, Boolean flag, Int32 itemindex)
Seaskyer.Modules.FdcSite.WebForm2.Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
System.Web.UI.WebControls.Repeater.OnItemDataBound(RepeaterItemEventArgs e) +110
System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +139
System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +475
System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +49
System.Web.UI.WebControls.Repeater.DataBind() +23
Seaskyer.Modules.FdcSite.WebForm2.getPage(DataTable dt)
Seaskyer.Modules.FdcSite.WebForm2.Page_Load(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +750


那位兄弟知道是为什么吗
...全文
279 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Martin-月影 2008-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 amandag 的回复:]
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ¦ ¦ e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView rowv = (DataRowView)e.Item.DataItem;
string ChannelID = rowv["ChannelID"].ToString();

IsView(ref Repeater1, true, e.Item.ItemIndex);

[/Quote]

或是吧你的函数写在Repeater1_ItemDataBound里面
最好不要这样判断
if(item.Controls[i].GetType().ToString().IndexOf("TextBox")!=-1)
{
//Response.Write("ttt");
((TextBox)item.Controls[i]).ReadOnly = true;
}

建议用 item.Controls[i] is TextBox

Smile_Wong1 2008-08-05
  • 打赏
  • 举报
回复
Reapter要 DataBound之后才可以遍历其Items值
你可以直接传RepeaterItem 作为参数啊。
或者就直接在Repeater1_ItemDataBound事件里直接判断就好了
当然要注意e.Item.ItemType == ListItemType.Item ¦ ¦ e.Item.ItemType == ListItemType.AlternatingItem
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
DataRowView rowv = (DataRowView)e.Item.DataItem;
string ChannelID = rowv["ChannelID"].ToString();

IsView(true,e.Item);
}
public void IsView(bool flag,RepeaterItem item)
{
if(item.Controls[i].GetType().ToString().IndexOf("TextBox")!=-1)
{
//Response.Write("ttt");
((TextBox)item.Controls[i]).ReadOnly = true;
}
}
或者:
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
DataRowView rowv = (DataRowView)e.Item.DataItem;
string ChannelID = rowv["ChannelID"].ToString();

//IsView(true,e.Item);
if(e.Item.Controls[i].GetType().ToString().IndexOf("TextBox")!=-1)
{
((TextBox)e.Item.Controls[i]).ReadOnly = true;
}
}
amandag 2008-08-05
  • 打赏
  • 举报
回复
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView rowv = (DataRowView)e.Item.DataItem;
string ChannelID = rowv["ChannelID"].ToString();

IsView(ref Repeater1, true, e.Item.ItemIndex);
}
}
chenguang79 2008-08-05
  • 打赏
  • 举报
回复
不是啊,我里面一定有值啊,就是我给的值是0他也提示是这个错误啊
wapit 2008-08-05
  • 打赏
  • 举报
回复
代码貌似没看出什么问题. 单步调试一下. 我怀疑是不是绑定的顺序什么的有关. 如执行该语句的时候控件还没绑定就会出错......
fuda_1985 2008-08-05
  • 打赏
  • 举报
回复
//这里提示说索引超出范围。必须为非负值并小于集合大小。参数名: index
提示很清楚了!你看看你的Repeater里面的值有没有那么多啊。索引大于repeater的长度了嘛!
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化;②掌握双层优化建模方法与粒子群算法在复杂电力系统中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

62,271

社区成员

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

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

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

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