【求助】从ASPX页面上提交到C#代码中,DataGrid中的DropDownList丢失

My Teching 2010-09-27 04:52:55
大家好,我有以下问题,请帮忙看看:

ASPX页面上有一个DataGrid,其中有DropDownList控件。
通过按扭提交到后台C#中,发现DataGrid.Items[0].Cells[0].Controls.Count为0(前面代码监视时,这里是有值的)。
这是怎么回事呢?可以获取到DropDownList控件么?
另外,我已经在ASPX页面的定义DataGrid的属性中加入了EnableViewState="true"。

谢谢!
...全文
200 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
panwenzhuo123 2010-10-23
  • 打赏
  • 举报
回复
你的DropDownList是放在模板列里面的吧,是不是放在了Edit状态的模板中,
而你去取这个DropDownList的时候,Item[0]是什么状态?最好贴代码上来

huangwenquan123 2010-10-23
  • 打赏
  • 举报
回复
可能由于回发了取不到值
可以试下不要在page_load里面绑定
在Init阶段处理看看
http://www.cnblogs.com/linlin/archive/2010/10/08/1845831.html
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 showshore 的回复:]
有朋友给点提示么?
[/Quote]

把几年前的Scott Mitchell的asp.net2.0入门教程全都做一遍,然后删除你的程序重新设计,这样以后(当用户需要而)改起来也有信心、有速度。
My Teching 2010-10-23
  • 打赏
  • 举报
回复
谢谢您的回复!
[Quote=引用 16 楼 wdxgdiy 的回复:]

protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
//这里写代码管事不
}
}
[/Quote]

已经试过了,不起作用的。
wdxgdiy 2010-10-23
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
//这里写代码管事不
}
}
My Teching 2010-10-23
  • 打赏
  • 举报
回复
有朋友给点提示么?
My Teching 2010-10-05
  • 打赏
  • 举报
回复
补充:
页面上下拉框的ID,就是“dgContent$ctl52$ctl00”“dgContent$ctl52$ctl01”“dgContent$ctl52$ctl02”之类的,分别代表了第52行的,第1,2,3...个下拉框控件。
My Teching 2010-10-05
  • 打赏
  • 举报
回复
谢谢您的热心回复!
[Quote=引用 12 楼 csdbfans 的回复:]

问问,你的DropDownlist是怎么放到DataGrid里的?而且还有一点,我想知道回调后页面还有没有下拉框的(把cs文件里查找下拉框的语句注释掉),有的话,你可以通过查看页面的源代码的,看看页面里的下拉框的id值是什么来的?因为我觉得页面每行的下拉框id都是不一样的,通过FindControl是不可能得到某一行的下拉框的,可能只能通过选中行的主键来找到下拉框
[/Quote]
在我6楼引用代码片段之前,做了DataGrid的DataBind(),再之前把行列数据写入了一个DataTable

this.dgContent.DataSource = dt.DefaultView;
this.dgContent.DataBind();

在这之后,在页面上的DataGrid的最后一行,动态给每列添加了DropDownList控件(也就是6楼的代码片段的作用)。
Csdbfans 2010-10-04
  • 打赏
  • 举报
回复
问问,你的DropDownlist是怎么放到DataGrid里的?而且还有一点,我想知道回调后页面还有没有下拉框的(把cs文件里查找下拉框的语句注释掉),有的话,你可以通过查看页面的源代码的,看看页面里的下拉框的id值是什么来的?因为我觉得页面每行的下拉框id都是不一样的,通过FindControl是不可能得到某一行的下拉框的,可能只能通过选中行的主键来找到下拉框
My Teching 2010-10-04
  • 打赏
  • 举报
回复
谢谢您的回复!
[Quote=引用 10 楼 csdbfans 的回复:]

你这里能不能讲讲你的页面回调是怎么回调的吗?
我想知道你增加Dropdownlist项是在哪执行的?
因为你说的是“在页面回调之前,DropDownList1之类的控件还存在;但当页面回调时,FindControl已经找不到原来的控件了”,我觉得有可能执行顺序的问题,导致得不到下拉框
[/Quote]
其实就是在选择好了DropDownList1控件某项后,点击页面上一个普通ASPNET按钮而已(这样会重新触发Page_Load事件),并没有什么特别的回调。
Csdbfans 2010-10-04
  • 打赏
  • 举报
回复
你这里能不能讲讲你的页面回调是怎么回调的吗?
我想知道你增加Dropdownlist项是在哪执行的?
因为你说的是“在页面回调之前,DropDownList1之类的控件还存在;但当页面回调时,FindControl已经找不到原来的控件了”,我觉得有可能执行顺序的问题,导致得不到下拉框
My Teching 2010-10-04
  • 打赏
  • 举报
回复
谢谢您的回复!
[Quote=引用 8 楼 clj2005 的回复:]

System.Web.UI.WebControls.DropDownList DDl;
foreach (DataGridItem dg in DataGrid1.Items)
{
DDL = (DropDownList)dg.FindControl("DropDownList1");


……
[/Quote]
关键是,在页面回调之前,DropDownList1之类的控件还存在;但当页面回调时,FindControl已经找不到原来的控件了,所以这样不行哦。
clj2005 2010-09-27
  • 打赏
  • 举报
回复
System.Web.UI.WebControls.DropDownList DDl;
foreach (DataGridItem dg in DataGrid1.Items)
{
DDL = (DropDownList)dg.FindControl("DropDownList1");


}
wuyq11 2010-09-27
  • 打赏
  • 举报
回复
贴出代码看看
My Teching 2010-09-27
  • 打赏
  • 举报
回复
谢谢大家的热心回复!

我们用的是VS2008来做开发。
根据列头的数量运行时动态追加的DropDownList。可以在客户端(JS)得到诸如“dgContent$ctl52$ctl00”之类的对象标识。

for (int i = 0; i < dispHeaders.Length; i++)
{
using (DropDownList ddl = new DropDownList())
{
ddl.Attributes.Add("onchange", String.Format("javascript:check_select({0}, {1});", i + 1, dispHeaders.Length - 1));
for (var j = 0; j < dispValues.Length; j++)
{
ddl.Items.Add(new ListItem(dispNames[j], dispValues[j]));
}
this.dgContent.Items[dt.Rows.Count - 1].Cells[i].Controls.Add(ddl);
}
}
anliuty 2010-09-27
  • 打赏
  • 举报
回复
你的DropDownList是放在模板列里面的吧,是不是放在了Edit状态的模板中,
而你去取这个DropDownList的时候,Item[0]是什么状态?最好贴代码上来
My Teching 2010-09-27
  • 打赏
  • 举报
回复
TO IHandler:
试过了,一样的。

TO YellowManDog:
我也觉得应该是回调的原因,但不知道怎么解决?
gongsun 2010-09-27
  • 打赏
  • 举报
回复
DataGrid ?

.net1.1的东西? 都.net4.0了 。。。

YellowManDog 2010-09-27
  • 打赏
  • 举报
回复
点按钮是回发了,是不是这个原因啊
IHandler 2010-09-27
  • 打赏
  • 举报
回复
用FindControl("控件ID")这个方法试试
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

62,271

社区成员

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

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

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

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