问一个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


那位兄弟知道是为什么吗
...全文
232 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的长度了嘛!

62,046

社区成员

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

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

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

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