验证GridView行

时间:2012-03-19 15:55:23

标签: asp.net gridview

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

我目前拥有的是一个包含三列的GridView(测试,结果,完成日期)。

对于Test列,它将根据SQL Script预先填充。结果列是空文本框,用户必须输入测试结果,日期列与包含空文本框的结果列相同,以便用户输入测试完成日期。我希望能够验证结果列,当前日期列我使用日历扩展程序,屏蔽编辑扩展程序和验证程序,这是正常工作。现在对于结果列,验证将根据测试而不同,测试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>

1 个答案:

答案 0 :(得分:1)

将我的评论添加为答案

添加所有必需的验证器,并根据“测试值”在RowDataBound中启用/禁用它们(保持我的示例摘要为您的问题)。

  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;
    }
  }