问题描述
当进入编辑状态时,我到原来的textbox移除了,换成了dropdownlist,但到RowUpdating的时候,controls[0].gettype(),还是textbox类型。请问如何可以把controls[0]的类型变成dropdownlist呢?protectedvoidgv_RowDataBound(objectsender,GridViewRowEventArgse){if((e.Row.RowState==(DataControlRowState.Edit|DataControlRowState.Alternate))||(e.Row.RowState==DataControlRowState.Edit)){TextBoxcurText;DropDownListsexddl=newDropDownList;sexddl.Items.Add("男");sexddl.Items.Add("女");sexddl.Items.Add("");curText=(TextBox)e.Row.Cells[2].Controls[0];sexddl.SelectedValue=curText.Text;e.Row.Cells[2].Controls.RemoveAt(0);e.Row.Cells[2].Controls.Add(sexddl);}}
解决方案
解决方案二:
遍历下Control里面有几个控件,0还是TextBox,说不定1就是DropDownList了呢,也可以考虑FindControl找下
解决方案三:
引用1楼starfd的回复:
遍历下Control里面有几个控件,0还是TextBox,说不定1就是DropDownList了呢,也可以考虑FindControl找下
试了,只有0,没有1gv.Rows[e.RowIndex].Cells[2].Controls[0].GetType().ToString();system.web.UI.webcontrols.textboxgv.Rows[e.RowIndex].Cells[2].Controls[1].GetType().ToString();会出错,“指定的参数已超出有效值的范围。”
解决方案四:
不要瞎Remove,这不是winform,这是web,它们的机制不同。wb页面对象在一瞬间就销毁了,下次访问时就重建了。而你写的Remove只是“上一次”创建页面之后(在处理事件时)执行过一次而已,你怎么能让下一次页面创建时还有DropDownList呢。如果没有学习过asp.net组件开发知识,就先不要编写这方面的代码。GridView本来就将普通显示和编辑的模板可以分开设置的。只要你按照初学者编写GridView正规方式编写就行了。
解决方案五:
直接转换为模板列,将编辑模板设置为DropDownList