【急】foreach给页面List控件赋值,怎么使它的值不覆盖别的List控件

2013-07-03 08:16:16
页面上一共有6个下拉列表控件,是cs动态生成的,控件和控件之间没有做任何关联。
之后再给这些控件赋值的时候却出了问题。
在代码中给Field1、Field2、Field3赋的值不同,但是赋值的时候,明明只改其中一个的值,另外两个控件的值也会跟着被改变。
同样给Sort1、Sort2、Sort3赋值却没有问题,这是为什么呢?

生成控件的代码:

//生成表
TableRow tableRow = new TableRow();
for (int i = 1; i < 4; i++)
{
//生成行
TableRow tableRow = new TableRow();
//cell
TableCell cellBody = new TableCell();
//生成第一个下拉列表控件
ListControlBase comboBox = (ListControlBase)ListControlBase.Create(Page, "ComboBoxControl");
//给下拉列表控件添加选项(lstItem是在for外面定义的一个ListItemCollection变量)
foreach (ListItem item in lstItem)
{
comboBox.Items.Add(item);
}
Control control = (Control)comboBox;
control.ID = "Field" + i;
//将控件放到cell中
AddControl(control);
cellBody.Controls.Add(control);

//第二个下拉列表控件
ListControlBase comboBox2 = (ListControlBase)ListControlBase.Create(Page, "ComboBoxControl");
comboBox2.ID = "Sort" + i;
//给下拉列表控件添加选项
comboBox2.AddItem("选项1","1");
comboBox2.AddItem("选项2","2");
//将控件放到cell中
AddControl(control2);
cellBody.Controls.Add(control2);
tableRow.Cells.Add(control2);
table.Rows.Add(tableRow);
}


给控件赋值的代码:

//RecordSet是取到的值
foreach (Record record in RecordSet)
{
//取出来的值会是1或2或3
string order = record.GetString(tableName.Order);
string id = "Field" + order;
//controls是所有控件的集合
if (controls.ContainsKey(id))
{
((ListControlBase)controls[id]).Value = record.GetString(tableName.FieldValue);
}
id = "Sort" + displayOrder;
if (controls.ContainsKey(id))
{
((ListControlBase)controls[id]).Value = record.GetString(tableName.SortValue);
}
}
...全文
198 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
2013-07-04
  • 打赏
  • 举报
回复
原因找到了,的确是循环里赋值的原因,但是以上说的也不全对。

//是这个添加值方式的原因
comboBox.Items.Add(item);  
//改成下面代码就好了
comboBox.AddItem(item.Text, item.Value);
AddItem是一个自定义方法,里面的代码很简单,就是先new ListItem,将Text和Value放入这个新New的对象里,然后将它再添加到控件中。 也就是说这两种赋值的方式就是差了一个New。
吴青峰 2013-07-03
  • 打赏
  • 举报
回复
给分,你自己看这办,都交你这么调试了,还找不出问题,那就不是我们的原因了。最重要的是,你要知道怎么去对比,找出问题。
吴青峰 2013-07-03
  • 打赏
  • 举报
回复
应该是循环这里出现了问题: //给下拉列表控件添加选项(lstItem是在for外面定义的一个ListItemCollection变量) foreach (ListItem item in lstItem) { comboBox.Items.Add(item); } Control control = (Control)comboBox; control.ID = "Field" + i; 仔细检查看看,为什么这里出现问题。 你把这块注释掉,然后用固定值看看,会不会出现类似的问题。
饕餮123 2013-07-03
  • 打赏
  • 举报
回复
汗,代码好乱,说一下我看到的问题啊
foreach (ListItem item in lstItem)
   {
       comboBox.Items.Add(item);
   }
这个是楼主的filed系列控件,他的items集合都是用的lstItem,所以楼主该其中的一个值的话,lstitem会跟着改变的,应为是按引用传递的
comboBox2.ID = "Sort" + i;
   //给下拉列表控件添加选项
   comboBox2.AddItem("选项1","1");
   comboBox2.AddItem("选项2","2");
这个是硬编码的,相互之间没有影响的 对的话分都给我啊。
tan598121925 2013-07-03
  • 打赏
  • 举报
回复
调试一下赋值的地方不就清楚了
2013-07-03
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
什么叫改其中的一个值,另外两个也变? 怎么改,怎么变? 我估计就是你代码写得有问题
代码我在上面都贴出来了,两组控件代码逻辑实现方式一模一样,要是代码有问题也不至于一个出问题一个没问题吧…… 这个就是给控件赋值的,ListControlBase是一个数据类型定义,这句应该都能看懂吧…… ((ListControlBase)controls[id]).Value = record.GetString(tableName.FieldValue);
Justin-Liu 2013-07-03
  • 打赏
  • 举报
回复
什么叫改其中的一个值,另外两个也变? 怎么改,怎么变? 我估计就是你代码写得有问题

62,046

社区成员

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

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

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

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