2012-03-19 55 views
0

我只需要一些關於如何驗證GridView列的建議。驗證GridView行

我現在擁有的是一個帶有三列(Tests,Results,Date Completed)的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> 
+0

你可以簡化你的問題只是專注於驗證,因爲這不是一個GridView的問題,是嗎?目前還不清楚你實際期望的是什麼(測試abc和測試cba是什麼?)。 – 2012-03-19 15:58:39

+0

嗯,我認爲這是因爲我想做一個GridView字段驗證... – 2012-03-19 15:59:49

+0

我的意思是「測試」是醫學測試......測試 - Flue Shot - 我只是簡單地指定一個示例測試(ABC) (CBA)... – 2012-03-19 16:01:53

回答

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