GridView中有一列是只显示的,另一列是可编辑的,我想做到的是,可编辑的列只允许输入数字,而且不能大于可显示的列值,请教各位大佬怎么加验证控件,加哪个验证控件?具体怎么写?
图例:------------------------------
       名称   可发货数量   本次发货量   
        1       20 
        2       50
      -----------------------------
本次发货量不能超过可发货数据。
aspx中的GridView代码如下:
          <asp:GridView ID="GridView1" runat="server" Width="80%" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:TemplateField>
                <ItemTemplate>
                <asp:CheckBox ID="chkSelect" runat="server" ></asp:CheckBox>
                </ItemTemplate>
                <ItemStyle Width="20px"/>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="名称">
                    <ItemTemplate>
                        <asp:Label ID="lbWh" runat="server" Text='<%# Bind("Wh") %>'></asp:Label>&nbsp;
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="可发库存数量">
                    <ItemTemplate>
                        <asp:Label ID="lbRest" runat="server" Text='<%# Bind("Rest") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="本次发货数量">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Rest") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

解决方案 »

  1.   

    你可以做成如csdn打分一样
      

  2.   


    <asp:GridView ID="GridView1" runat="server" Width="80%" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
                <Columns> 
                    <asp:TemplateField> 
                    <ItemTemplate> 
                    <asp:CheckBox ID="chkSelect" runat="server" > </asp:CheckBox> 
                    </ItemTemplate> 
                    <ItemStyle Width="20px"/> 
                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="名称"> 
                        <ItemTemplate> 
                            <asp:Label ID="lbWh" runat="server" Text=' <%# Bind("Wh") %>'> </asp:Label>&nbsp; 
                        </ItemTemplate> 
                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="可发库存数量"> 
                        <ItemTemplate> 
                            <asp:Label ID="lbRest" runat="server" Text=' <%# Bind("Rest") %>'> </asp:Label> 
                        </ItemTemplate> 
                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="本次发货数量"> 
                        <ItemTemplate> 
                            <asp:TextBox ID="TextBox1" runat="server" Text=' <%# Bind("Rest") %>'> </asp:TextBox> 
                            <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtNumber" 
                   ErrorMessage="人数必须大于0" Operator="GreaterThan" Type="Integer" ValueToCompare='<%# Bind("Rest") %>'></asp:CompareValidator>
                        </ItemTemplate> 
                    </asp:TemplateField> 
                </Columns> 
            </asp:GridView>
      

  3.   

    <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtNumber" 
                   ErrorMessage="发货数量不能大于库存数量" Operator="GreaterThan" Type="Integer" ValueToCompare='<%# Bind("Rest") %>'></asp:CompareValidator>
    这样就行了。
      

  4.   

    asp.net夜话之九:验证控件
    验证控件是微软推出一组用于减少网站程序开发人员编写客户端脚本验证代码的控件,熟练使用这些验证控件可以很方便地验证用户填写的数据的规则有效性。
    本篇要讲述的知识点如下:数据验证介绍纯客户端脚本验证asp.net验证控件概述RequiredFieldValidator控件CompareValidator控件RangeValidator控件正则表达式RegularExpressionValidator控件CustomValidator控件ValidationSummary控件 分组校验技术并讲述了验证控件之间如何搭配使用,以及一些个人经验和技巧。asp.net夜话之八:数据绑定控件
    在asp.net中所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,这个抽象类定义了几个重要属性和一个重要方法:DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。DataSourceID属性:指定数据绑定控件的数据源控件的ID, 显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说DataSource和DataSourceID两个属性不能同时使用。数据绑定控件的DataSource控件属性必须是一个可以枚举的数据源,如实现了ICollection、IEnumerable或IListSource接口的类的实例。
      

  5.   

    在EditTemplate设计修改数据的视图,以可发货库存数量为例:          <asp:GridView ID="GridView1" runat="server" Width="80%" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
                <Columns> 
                    <asp:TemplateField> 
                    <ItemTemplate> 
                    <asp:CheckBox ID="chkSelect" runat="server" > </asp:CheckBox> 
                    </ItemTemplate> 
                    <ItemStyle Width="20px"/> 
                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="名称"> 
                        <ItemTemplate> 
                            <asp:Label ID="lbWh" runat="server" Text=' <%# Bind("Wh") %>'> </asp:Label>&nbsp; 
                        </ItemTemplate> 
                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="可发库存数量"> 
                        <ItemTemplate> 
                            <asp:Label ID="lbRest" runat="server" Text=' <%# Bind("Rest") %>'> </asp:Label> 
                        </ItemTemplate> 
                        <EditItemTemplate>
                             在这里增加修改数据的控件,例如TextBox, 数据验证控件等等
                        </EditItemTemplate>

                    </asp:TemplateField> 
                    <asp:TemplateField HeaderText="本次发货数量"> 
                        <ItemTemplate> 
                            <asp:TextBox ID="TextBox1" runat="server" Text=' <%# Bind("Rest") %>'> </asp:TextBox> 
                        </ItemTemplate> 
                    </asp:TemplateField> 
                </Columns> 
            </asp:GridView> 
      

  6.   

    在后台绑定onkeypress与onkeydown事件
    TextBox1.Attributes.Add("onkeydown","if(13==event.keyCode) return checkOnlyNum(this);");
    TextBox1.Attributes.Add("onkeypress","OnlyInputNum();");在前台定义
    function OnlyInputNum()
    {
      if(event.keyCode<asc("0") || event.keyCode>asc("9"))  
         event.returnValue=false;
    }function checkOnlyNum(this)
    {
      var intvalue = this.value;
      var intmax = this.parentElement.cells[1].children[0].value;
      if(intvalue  >intmax )
      {
        alert("输入的值过大");
        return false;
       }
       return true;
    }
    你试试
      

  7.   

    TextBox1.Attributes.Add("onkeydown","if(13==event.keyCode) return checkOnlyNum(this);"); 
    TextBox1.Attributes.Add("onkeypress","OnlyInputNum();"); 
    TextBox是存在GRidView里的,如果要绑定客户端事件的话,你可以GridView的数据绑定后的事件里做,用e.FindContorl("控件名"),然后在绑定客户端事件
      

  8.   

    <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtNumber" 
                   ErrorMessage="人数必须大于0" Operator="GreaterThan" Type="Integer" ValueToCompare='<%# Bind("Rest") %>'></asp:CompareValidator>
    顶,就这个吧
      

  9.   

    这样子不行..报:无法找到“CompareValidator2”的“ControlToValidate”属性所引用的控件 ID“txtNumber”。 
    我将他改为ControlToValidate="TextBox1",可以通过编辑,但不起作用,不执行验证
      

  10.   

    解决啦,把Operator="GreaterThan"改为Operator="LessThanEqual"就行了,ControlToValidate="txtNumber" 改为ControlToValidate="TextBox1" 
    多谢楼上众位大虾美女,接分了.