在DataGrid的编辑状态中,如何校验输入到文本框的数据是否正确?

解决方案 »

  1.   

    用Template 和RegularExpressionValidator
      

  2.   

    <ItemTemplate>
    <asp:TextBox id="aa" onkeyup="Compare()" runat="server" 0</asp:TextBox>
    </ItemTemplate>
    <script>
    function Compare()
    {
    }
    </script>
      

  3.   

    我的模板列是自己构建和绑定数据的,那么怎么校验输入的是否数字型、货币型、时间型??
    public class CTemplateColumn:ITemplate
    {
    private string colname;
            public CTemplateColumn( string cname)
    {
    colname = cname;
    }    public void InstantiateIn(Control container)       
        {
             TextBox tx = new TextBox();
             tx.DataBinding += new EventHandler(this.OnDataBinding);
             container.Controls.Add(tx);
         }
        public void OnDataBinding(object sender, EventArgs e)
        {
             TextBox tx = (TextBox) sender;
             DataGridItem container = (DataGridItem)tx.NamingContainer;
             tx.Text = ((DataRowView)container.DataItem)[colname].ToString();
        }
    }
      

  4.   

    <asp:datagrid id="dgrdGuestBook" runat="server" AllowSorting="True" AutoGenerateColumns="False"
    AllowPaging="True" DataKeyField="id" Width="778px" Height="264px">
    <AlternatingItemStyle BackColor="#C0C0FF"></AlternatingItemStyle>
    <ItemStyle Font-Size="9pt" Height="24px"></ItemStyle>
    <HeaderStyle Font-Size="9pt" HorizontalAlign="Center" Height="24px" ForeColor="#C0C0FF" BackColor="DarkBlue"></HeaderStyle>
    <FooterStyle Font-Size="9pt" Height="24px"></FooterStyle>
    <Columns>
    <asp:BoundColumn DataField="id" SortExpression="id" ReadOnly="True" HeaderText="id">
    <HeaderStyle Width="20px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    </asp:BoundColumn>
    <asp:TemplateColumn SortExpression="title" HeaderText="标题">
    <HeaderStyle Width="100px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container, "DataItem.title" )%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtTitle Text='<%# DataBinder.Eval(Container, "DataItem.title")%>' Runat="server">
    </asp:TextBox>
    <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" Display="Dynamic" ControlToValidate="txtTitle">必须输入标题</asp:RequiredFieldValidator>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="内容">
    <HeaderStyle Width="400px"></HeaderStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container, "DataItem.content" )%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=txtContent runat="server" Height="100px" Width="400px" TextMode="MultiLine" Text='<%# DataBinder.Eval(Container, "DataItem.content")%>'>
    </asp:TextBox>
    <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" Display="Dynamic" ControlToValidate="txtContent">必须输入内容</asp:RequiredFieldValidator>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="intime" HeaderText="时间">
    <HeaderStyle Width="100px"></HeaderStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container, "DataItem.intime" )%>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <HeaderStyle Width="25px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle>
    <ItemTemplate>
    <asp:LinkButton id="lbtnDelete" runat="server" CommandName="Delete">删除</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn Visible="False" ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑">
    <HeaderStyle Width="55px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle>
    </asp:EditCommandColumn>
    </Columns>
    <PagerStyle NextPageText="下一页" Height="24px" Font-Size="9pt" PrevPageText="上一页" HorizontalAlign="Right"
    Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
      

  5.   

    http://community.csdn.net/Expert/topic/3603/3603980.xml?temp=.5553247
      

  6.   

    看了楼上推荐的网址,发现有段代码比较适合我现在需要,但仍然地方要改.........................................................................................
    因为textbox放到datagrid里面,经过编译以后,其ID会变化,但是还是有一定规律的
    比如下面的模板列:
    <asp:TemplateColumn HeaderText="数 量">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:TextBox id=SL Text='<%# DataBinder.Eval(Container.DataItem,"SL") %>' Width="70px" CssClass="tabletxt" MaxLength="10" Runat="server" EnableViewState="False">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>经过编译以后,最终显示在页面上的html就会是下面的形式<input name="WL_WZBM:_ctl3:SL" type="text" value="50" maxlength="10" id="WL_WZBM__ctl3_SL" class="tabletxt" style="width:70px;" />
    <input name="WL_WZBM:_ctl4:SL" type="text" value="50" maxlength="10" id="WL_WZBM__ctl4_SL" class="tabletxt" style="width:70px;" />我现在要验证其是不是数字,可以采用下面的js验证:
    funtion Check_Data()
    {
     var reg=/^([1-9]*[0-9]*|0)$/;                  //定义验证整型数据的正则表达式。
      //遍历页面上所有HTML对象
      for(var i=0;i < document.all.length;i++)
      {
       //首先确定要验证的是text
       if(document.all[i].type == "text")
       {
        var T_ID = document.all[i].id;          //得到text的ID
        var T_value = document.all[i].value;    //得到text的值
        //因为模板列SL生成的html的text的ID后面都是"_SL",所以我就判断所有文本框的ID最后三个字符为"_SL"的文本框的值
        if(T_ID.substring(T_ID.length-3,T_ID.length)=="_SL" && T_value.length == 0)
        {
          alert("数据提交失败:您必须为每类物资填写到货数量!");
          document.all[i].focus();     //使出错的文本框中的值处于被选中状态
          return false; 
        }
        if(T_ID.substring(T_ID.length-3,T_ID.length)=="_SL" && && reg.test(T_value)==false)
        {
          alert("数据提交失败:到货数量输入不符合规范!");
          document.all[i].select();     //使出错的文本框中的值处于被选中状态
          return false; 
        }
        //其他文本框验证
        return true;
       }
      }
    }
    ..........................................................................................
    但我生成HTML里面的文本框代码没有ID属性<INPUT value=长江实业 name=dgTest:_ctl2:_ctl1>
    <INPUT value=长江实业 name=dgTest:_ctl2:_ctl2>
    <INPUT value=长江实业 name=dgTest:_ctl3:_ctl1>第一个ctl2代表行,第二个ctl1代表列,如第一文本name=dgTest:_ctl2:_ctl1就代表第二行第一列的那个单元格
    那么怎么修改上面脚本??我对脚本不是很熟,而且脚本调试也比较麻烦,希望各位能帮帮手!!!