Asp.net 验证GridView行

Asp.net 验证GridView行,asp.net,gridview,Asp.net,Gridview,我只需要一些关于如何验证GridView列的建议 我现在有一个GridView,它有三列(测试、结果、完成日期) 对于测试列,它将基于SQL脚本预先填充。“结果”列为空文本框,用户必须输入测试结果,“日期”列与“结果”列相同,其中包含空文本框,用户可以输入完成测试的日期。我希望能够验证结果列,目前我正在使用日历扩展程序、蒙面编辑扩展程序和验证程序验证日期列,并且工作正常。现在,对于结果列,验证将根据测试而不同,测试ABC的结果只能在2-7之间,而测试CBA可以为真/假,依此类推。我只是不知道如何

我只需要一些关于如何验证GridView列的建议

我现在有一个GridView,它有三列(测试、结果、完成日期)

对于测试列,它将基于SQL脚本预先填充。“结果”列为空文本框,用户必须输入测试结果,“日期”列与“结果”列相同,其中包含空文本框,用户可以输入完成测试的日期。我希望能够验证结果列,目前我正在使用日历扩展程序、蒙面编辑扩展程序和验证程序验证日期列,并且工作正常。现在,对于结果列,验证将根据测试而不同,测试ABC的结果只能在2-7之间,而测试CBA可以为真/假,依此类推。我只是不知道如何验证每个字段。我希望你能帮助我。谢谢

<asp:GridView ID="grdResults" runat="server"
    CssClass="gridview" 
    RowStyle-CssClass="gridview_itm" 
    AlternatingRowStyle-CssClass="gridview_aitm" 
    HeaderStyle-CssClass="gridview_hdr" 
    Width="100%" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField HeaderText="Test">
            <ItemTemplate>
                <asp:Label ID="lblTest" runat="server" Text='<%#Eval("Test")%>'></asp:Label>
            </ItemTemplate>                                                
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Result">
            <ItemTemplate>
                <asp:TextBox ID="tbResult" runat="server" ></asp:TextBox>
            </ItemTemplate>                                                
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Date Completed">
            <ItemTemplate>
                <asp:TextBox ID="tbDate" runat="server" ></asp:TextBox>
                <asp:Image ID="imgCalendar" runat="server" ImageUrl="~/App_Themes/Sugar2006/images/Calendar_scheduleHS.png" ImageAlign="Middle" />
                <asp:CalendarExtender ID="ce" runat="server" TargetControlID ="tbDate" PopupButtonID="imgCalendar" />        
                <asp:MaskedEditExtender ID="mex" runat="server" 
                    TargetControlID="tbDate" 
                    Mask="99/99/9999" 
                    MaskType="Date"
                    MessageValidatorTip="true"
                    OnFocusCssClass="MaskedEditFocus"
                    OnInvalidCssClass="MaskedEditError" />
                <asp:MaskedEditValidator ID="mev" runat="server" 
                    ControlToValidate="tbDate"
                    ControlExtender="mex" 
                    Display="Dynamic" 
                    InvalidValueMessage="This date is invalid" Font-Bold="True" 
                    ForeColor="#D50000" />
            </ItemTemplate>                                                
        </asp:TemplateField>                                                            
    </Columns>        
</asp:GridView>

添加我的评论作为答案


添加所有必需的验证器,并根据“测试值”启用/禁用它们(将我的示例作为您的问题进行抽象)


由于这根本不是一个GridView问题,您能否通过集中精力验证来简化您的问题,是吗?也不清楚您实际期望的是什么(什么是
测试abc
测试cba
?)。我想这是因为我想进行GridView现场验证……我所说的“测试”是指医学测试。。。测试-烟道射击-我只是简单地指定了一个样本测试(ABC)(CBA)…你的问题有点不清楚。但我想您应该尝试更新数据,因为您已经检索到一列的数据。如果是这样的话,您可以添加另一个ItemTemplate,该ItemTemplate保持“更新”按钮,您可以在其中执行验证以到达行。为了进行验证,您可以在客户端使用JavaScript/JQurey,也可以在GridView.rowUpdate中的代码隐藏中进行验证,添加所有必需的验证器,并根据“测试值”(我假设这是某种类型)在RowDataBound中启用/禁用它们。以后不要再使用像
testabc
这样的例子,因为它们会让人困惑,而且毫无意义(就可理解性而言)。
  void GrdResults_RowDataBound(Object sender, GridViewRowEventArgs e)
  {
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView rowView = (DataRowView)e.Row.DataItem;
        String testValue = rowView["Test"];
        CompareValidator cv1 = (CompareValidator)e.Row.FindControl("cv1); // checks between 2-7
        CompareValidator cv2 = (CompareValidator)e.Row.FindControl("cv2); // checks true/false
        cv1.Enabled = testValue.ToUpper().Equals("ABC");
        cv2.Enabled = !cv1.Enabled;
    }
  }