我有一个DataGrid,在处于编辑行状态时,我动态加载了一个验证控件,以验证一定要用户输入数据,这个验证是起作用的,但当我按下更新按钮时,这个验证控件就找不到了,我看源代码是没有相关代码了,就是说,在页面提交过后,如何才能让这个验证控件依然能够被我找到?附代码如下
private void Answer_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.EditItem)
{
TextBox m = ((TextBox)e.Item.Cells[1].Controls[0]);
m.ID = "ThisM";
m.CssClass = "input";
RequiredFieldValidator temp = new RequiredFieldValidator();
temp.ID = "Temp";
temp.Display = ValidatorDisplay.Dynamic;
temp.ErrorMessage = " 请输入答案";
temp.ControlToValidate = "ThisM";
e.Item.Cells[1].Controls.Add(temp);
}
}
这一步在点击编辑时生效,也的确是生效了,但点击更新时,新增加的temp这个验证控件就没有了,请教各位,有办法能解决吗?
private void Answer_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.EditItem)
{
TextBox m = ((TextBox)e.Item.Cells[1].Controls[0]);
m.ID = "ThisM";
m.CssClass = "input";
RequiredFieldValidator temp = new RequiredFieldValidator();
temp.ID = "Temp";
temp.Display = ValidatorDisplay.Dynamic;
temp.ErrorMessage = " 请输入答案";
temp.ControlToValidate = "ThisM";
e.Item.Cells[1].Controls.Add(temp);
}
}
这一步在点击编辑时生效,也的确是生效了,但点击更新时,新增加的temp这个验证控件就没有了,请教各位,有办法能解决吗?
解决方案 »
- 请问C#如何查看某一进程的上下行流量?
- 您的主机中的软件放弃了一个已建立的连接。让人纠结的这个错误!
- 在SQL SERVER 里创建表格时有问题
- 一个事务里不能同时用SqlCommand的ExecuteNonQuery和SqlDataAdapter的Update这两种方法更新数据库?
- 想学C#,能否推荐给我一本公认的好书!
- DataTable的Select方法问题
- C#中WINFORM中DataGrid中添加ComboBOx控件怎么实现?要源程序
- XtraReport
- 问个问题 多线程的
- 那位能给点C#生成统计图表源码?指点一下迷津!不够加分!
- 求教,如何在异步委托中获得返回值?
- 如何取得毫秒啊?
if( e.Item.ItemType == ListItemType.EditItem )
{
RangeValidator rerange = new RangeValidator();
rerange.ControlToValidate = "TextBox2";
rerange.Type = ValidationDataType.Integer;
rerange.Text = "*";
rerange.Display = ValidatorDisplay.Dynamic;
rerange.MaximumValue = "100";
rerange.MinimumValue = "1";
rerange.ErrorMessage = "Please input number";
e.Item.Cells[2].Controls.Add(rerange);
}
我的是RangeValidator,但应该意思是一样的啊
http://blog.joycode.com/saucer/archive/2004/10/20/35927.aspx
现在的问题变成了,只要做成模板列,模板列里的文本框是能够保值的,但是用 ((TextBox)Answer.Items[e.Item.ItemIndex].Cells[1].Controls[0]).Text 方法,可以发现textbox不能保值了,这就是问题关键,只要能取到这个值,一切问题都解决了.
我又试验了一下,终于发现问题所在了
if (e.Item.ItemType == ListItemType.EditItem)
{
TextBox m = ((TextBox)e.Item.Cells[1].Controls[0]);
m.ID = "ThisM";
m.CssClass = "input";
temp = new RequiredFieldValidator();
temp.ID = "Temp";
temp.Display = ValidatorDisplay.Dynamic;
temp.ErrorMessage = " 请输入答案";
temp.ControlToValidate = m.ID;
e.Item.Cells[1].Controls.Add(temp);
((LinkButton)e.Item.Cells[3].Controls[0]).Attributes.Add("onclick","BrushOffAll();ValidatorEnable(" + temp.ClientID + ",true);");
}
原来问题出在 m.ID = "ThisM"; 这一行上!
在给m的ID赋过值后,再点击更新,m就不能保值了,只要把这句话注掉,m就能实现保值,但是新的问题又来了,如果把这句话注掉,temp的 ControlToValidate 属性就无法设置了,也就无法添加验证控件了,各位,对这个问题有解吗?
e.Item.Cells[1].Controls.Add//增加这个控件如果不是
你在ItemDataBound事件中只要动态产生那个equiredFieldValidator就可以了,而在UpdateCommand事件中去TextBox BigMenuName = (TextBox)e.Item.FindControl("控件ID");
<HeaderStyle Width="35%"></HeaderStyle>
<ItemTemplate>
<%# DataBinder.Eval(Container,"DataItem.SmallTemplet_Link")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox3" Runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.SmallTemplet_Link")%>' Width="90%" Height="20px">
</asp:TextBox>
</EditItemTemplate>