gridview中动态添加的控制页面回传时无法获取

franksnow 2009-09-24 12:07:13
源码片段如下,郁闷哦。以前其实遇到过的,现在忘记了。

数据绑定的代码

if (e.Row.RowType == DataControlRowType.DataRow)
{
RadioButtonList rabut_v1 = new RadioButtonList();
rabut_v1.ID = "rabut_v1";
rabut_v1.Items.Add(new ListItem("是", "1"));
rabut_v1.Items.Add(new ListItem("否", "0"));
rabut_v1.RepeatDirection = RepeatDirection.Horizontal;
TextBox txt_svalue1 = (TextBox)e.Row.FindControl("txt_svalue1");
TextBox txt_svalue2 = (TextBox)e.Row.FindControl("txt_svalue2");
Label lab_value = (Label)e.Row.FindControl("lab_value");

if (txt_svalue1.ToolTip == "B")
{
if (txt_svalue1.Text == "1.0000")
{
rabut_v1.SelectedIndex = 0;
}
else
{
rabut_v1.SelectedIndex = 1;
}

e.Row.Cells[1].Controls.Remove(txt_svalue1);
e.Row.Cells[1].Controls.Remove(txt_svalue2);
e.Row.Cells[1].Controls.Remove(lab_value);
e.Row.Cells[1].Controls.Add(rabut_v1);
}
else if (txt_svalue1.ToolTip == "V")
{
txt_svalue1.ToolTip = "";
}
}



保存的时候的事情代码,RadioButtonList 无法获得,不管用什么方式。

for (int i = 0; i < GridView1.Rows.Count; i++)
{
Label lab_names = (Label)GridView1.Rows[i].FindControl("lab_names");
modguide = bllguide.GetModel(sid, lab_names.ToolTip);
if (modguide.stsave =="B")
{
RadioButtonList rabut_v1 = (RadioButtonList)GridView1.Rows[i].Cells[1].Controls[1];
modguide.svalue1 = Decimal.Parse(rabut_v1.SelectedValue);
bllguide.Update(modguide);

}
else if (modguide.stsave == "V")
{
TextBox txt_svalue1 = (TextBox)GridView1.Rows[i].FindControl("txt_svalue1");
TextBox txt_svalue2 = (TextBox)GridView1.Rows[i].FindControl("txt_svalue2");

modguide.svalue1 = Decimal.Parse(txt_svalue1.Text);
modguide.svalue2 = Decimal.Parse(txt_svalue2.Text);
bllguide.Update(modguide);
}
}
...全文
195 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你要实现什么功能??
fhjzgsy 2009-09-24
  • 打赏
  • 举报
回复
ding
SK_Aqi 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sp1234 的回复:]
我甚至看到过一个blog,上面说“尽量用代码来生成界面”!

本来几乎不用写代码的。过分偏爱玩代码的方式,悲剧啊!
[/Quote]
顶sp1234
  • 打赏
  • 举报
回复
我甚至看到过一个blog,上面说“尽量用代码来生成界面”!

本来几乎不用写代码的。过分偏爱玩代码的方式,悲剧啊!
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 franksnow 的回复:]
悲剧啊!~我也想到第一种在这样做呢?
或则JS,不过第二种没头绪。要找点示例看看。
[/Quote]

悲剧啊!你写的代码越多,越麻烦。

我见到很多喜欢炫耀写代码的能力的人。但是我就相信尽量不写代码的人才能有能力写出好的应用!

你把RadionButtonList(以及其它许多控件)声明到模板列中,用数据绑定控制其visible属性值就可以了,写那么多代码岂不是上演悲剧?
conanhhy 2009-09-24
  • 打赏
  • 举报
回复
给个示例
前台:


<body>
<div id='divContent'></div>
</body>



JS:



var tmp = "<input type='text' id='txt1' value='xxx' />";
div.innerHTML += tmp;




后台获取:


Request.Form["txt1"]

franksnow 2009-09-24
  • 打赏
  • 举报
回复
还想到一个偷懒的办法。没有技术含量的办法。

就是一个模板列里面事先放上几种控件,全都visible=False。
然后根据条件显示其中一个。看上去动态了。这样值应该能获得了。
franksnow 2009-09-24
  • 打赏
  • 举报
回复
悲剧啊!~我也想到第一种在这样做呢?
或则JS,不过第二种没头绪。要找点示例看看。
conanhhy 2009-09-24
  • 打赏
  • 举报
回复
想起来,我也碰到过类似的问题,在页面回传后,动态添加的部分虽然页面能看到,但控件不一定能找到。

我之前通过两种方法解决的:
1. 在页面回发时,重新动态添加,这个方法比较繁琐,因为如果控件值有变化,还需要还原值

2. 改用JS + 客户端控件实现
franksnow 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 conanhhy 的回复:]
你有没有试过
Page.FindControl()的方式?
我以前也碰到过的类似的问题,通过 Page.FindControl()就可以获取
[/Quote]

应该不行,因为是动态添加到gridview里面的,每行都有可能添加一个RadioButtonList。根据参数的。
所以每一添加的时候ID都命名为rabut_v1。
所以这个ID只能由行来得到,页面得到的一定不是这个ID名。但是由于不是事先添加的。
总之获得那个gridview行的时候那个RadioButtonList控件找不到,但是显示的时候却在上面了。就是回传的时候貌似动态添加的和移除的这个动作没有被回传。
conanhhy 2009-09-24
  • 打赏
  • 举报
回复
你有没有试过
Page.FindControl()的方式?
我以前也碰到过的类似的问题,通过 Page.FindControl()就可以获取
franksnow 2009-09-24
  • 打赏
  • 举报
回复
又加了20分。期待高手解答。
franksnow 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lixinramaxel41658133 的回复:]
你要实现什么功能??
[/Quote]

我有一个gridview里面每行的其中一个列里面。输入控件有2种模式,根据参数变化,获取的值都一样,存一个表里面。

所以我默认先模板里放了第一个控件,可以正常获取。后面一个控件我根据参数动态加添,然后移除前面默认的那个控件。现在显示效果都正常。

就是在最后保存的时候。遍历每行保存的时候,默认控件可以获取到。但是动态添加进去的控件无法获取。
franksnow 2009-09-24
  • 打赏
  • 举报
回复

RadioButtonList rabut_v1 = (RadioButtonList )e.Row.FindControl("rabut_v1");

这个我试过,我那个控件ID赋值了是rabut_v1。

但是获取不到RadioButtonList,获得到的还是移除前的textbox控件。奇怪呀!~

本地回传的时候是不是只能回传viewstate里面的值呢。

conanhhy 2009-09-24
  • 打赏
  • 举报
回复
如果还是不行,尝试下


Page.FindControls("rabut_v1")


这个方法可以的
conanhhy 2009-09-24
  • 打赏
  • 举报
回复
有没有试过:


RadioButtonList rabut_v1 = (RadioButtonList )e.Row.FindControl("txt_rabut");

SK_Aqi 2009-09-24
  • 打赏
  • 举报
回复
关注

62,025

社区成员

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

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

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

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