在线调查系统的取值问题?or你有更好的思路?

ice321105 2007-03-31 05:32:30
数据库用两个表,一个存调查主题,另一个存对应主题的选项.
显示面页用DataList显示主题,并在ItemTemplate里放了个PlaceHolder用于显示该主题对应的选项,因为调查有单选或多选的可能,所不能直接放RodioButtonList或CheckBoxList. datalist_ItemDataBound事件代码:
protected void dListShowSbject_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//给调查主题添加编号
if (e.Item.ItemIndex >= 0)
{
((Label)e.Item.FindControl("lblAutoID")).Text =Convert.ToString(e.Item.ItemIndex + 1);
}
//邦定对应调查主题的选项
int pollid = int.Parse(this.dListShowSbject.DataKeys[e.Item.ItemIndex].ToString());
string selectMode = pl().GetPollSelectMode(pollid).ToString();//取得选择模式(selectmode)

RadioButtonList rbl = new RadioButtonList();
rbl.DataSource = pl().GetPollOptions(pollid);
rbl.DataValueField = "id";
rbl.DataTextField = "options";
CheckBoxList cbl = new CheckBoxList();
cbl.DataSource = pl().GetPollOptions(pollid);
cbl.DataValueField = "id";
cbl.DataTextField = "options";
PlaceHolder pollHolder = (PlaceHolder)e.Item.FindControl("pollHolder");
if (selectMode == "1")//判断是否是单选
{
rbl.DataBind();
pollHolder.Controls.Add(rbl);//RadioButtonList绑定
}
else
{
cbl.DataBind();
pollHolder.Controls.Add(cbl);//CheckBoxList绑定
}
}
}
显示没有问题
取值:我是在一个button里用循环来取值的,但是报错了,
代码:
protected void btnSubmit_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.dListShowSbject.Items.Count; i++)
{
int pollid = int.Parse(this.dListShowSbject.DataKeys[i].ToString());
string selectMode = pl().GetPollSelectMode(pollid).ToString();//取得选择模式(selectmode)

if (selectMode == "1")
{
RadioButtonList rbl = ((RadioButtonList)(this.dListShowSbject.Items[i].FindControl("pollHolder").Controls[0]));
int opid = int.Parse(rbl.SelectedValue);
Response.Write(opid);//测试能否取到值
}
else
{
CheckBoxList cbl = (CheckBoxList)(this.dListShowSbject.Items[i].FindControl("pollHolder").Controls[0]);
string opid = "";
for (int j = 0; j < cbl.Items.Count; i++)
{
if (cbl.Items[j].Selected)
{
opid += cbl.Items[j].Value + ",";
}
if (opid != string.Empty)
{
Response.Write(opid);//测试能否取到值
}
}
}
}
}

错误提示:指定的参数已超出有效值的范围。
参数名: index
红色代码:RadioButtonList rbl = ((RadioButtonList)(this.dListShowSbject.Items[i].FindControl("pollHolder").Controls[0]));

找了半天的错了,我自己测了一下,发现如果是静态在PlaceHolder放的控件就能找到,但在代码添加的到PlaceHolder的控件就提示超出范围.
请各位大哥帮忙看看,或者你们有好的思路也讲讲,先谢谢了,在线等候...
...全文
310 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wapit 2008-03-30
  • 打赏
  • 举报
回复
正遇到这个.
mark一下试试.

谢谢了!
ice321105 2007-04-01
  • 打赏
  • 举报
回复
自己解决了,

原因是placeHolder.control.add()控件后,就释放了,当按button时,ispostback后动态添加的控件都没有了,所以在FindCountrol时检索不到,会提示:指定的参数已超出有效值的范围

解决是:把placeHolder.control.add()控件放在if(!ispostback){}之外,就能找到了
品铭工作室 2007-04-01
  • 打赏
  • 举报
回复
polholder要序列化后才能放到viewState中
品铭工作室 2007-04-01
  • 打赏
  • 举报
回复
不好意!上面的的解决方法有点问题,
pollHolder这个控件放到session中保存起来,在click下获取session中的pollHolder
这样应该是没问题的
hy_lihuan 2007-04-01
  • 打赏
  • 举报
回复
你现在是要后台添加调查的问题,还是显示出来让客户去选阿?
你好像是后者的显示:我的思路是这样的;
后台添加的时候就确定类型:多选还是单选,然后在前台根据类型来考虑是否什么控件;
这样的话你不要动态的写,直接放在panel里面隐藏和显示好了;

这些经验都是在线测试做的时候得思路,应该对你有所帮助!
curd0468 2007-04-01
  • 打赏
  • 举报
回复
代码好长,看着头痛
海洋齐齐 2007-04-01
  • 打赏
  • 举报
回复
UP
品铭工作室 2007-04-01
  • 打赏
  • 举报
回复
还是不行,....
品铭工作室 2007-04-01
  • 打赏
  • 举报
回复
不好意!上面的的解决方法有点问题,
pollHolder这个控件放到Viewstate中保存起来,在click下获取viewstate中的pollHolder
这样应该是没问题的
品铭工作室 2007-04-01
  • 打赏
  • 举报
回复
你的最终目的是想获取客户选择了那一个值
问题是pollHolder.Controls.Add()方法时没有动态加入你的指定子控件
由于你的btnSubmit的按钮不是DataList控件的子控件,我不清楚你的DataList的Binding在什么时候被引发的,但可以知道在Click事件下不会引发DataList的ItemdataBound事件,不会执行pollHolder.Controls.Add()这些代码,click事件之前只会Load你的原始状态, 动态的控件就不会被加入到pollHolder中去;
方法很多,最直接的方法就是:把你的BtnSubmit放到DataList中,代码就不用改太多了
具体做法我就不说了

ice2927276 2007-04-01
  • 打赏
  • 举报
回复
再顶
ice321105 2007-04-01
  • 打赏
  • 举报
回复
我汗,不会吧,放了一天了,没人会啊??

高手帮帮我啊
ice321105 2007-03-31
  • 打赏
  • 举报
回复
求命啊,

up
ice321105 2007-03-31
  • 打赏
  • 举报
回复
不会吧,高手呢,

我再顶
ice2927276 2007-03-31
  • 打赏
  • 举报
回复
学习,

帮顶
ice321105 2007-03-31
  • 打赏
  • 举报
回复
谢谢楼上的,还有其它方法吗,

大家来帮帮忙啊,
sqfeiyu 2007-03-31
  • 打赏
  • 举报
回复
因為提交后dListShowSbject重綁定不會產生動態添加的控件﹐所以取不到。
可以考慮用一個隱藏域﹐在客戶端選取時﹐保存選取的內容。

62,254

社区成员

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

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

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

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