2013-08-28 73 views
0

我有一個程序,動態創建各種文本框/下拉列表。我試圖弄清楚如何只在更改時驗證這些字段。基本上,如果有人在文本框中輸入日期,那麼我需要程序驗證下拉列表是否已更改,反之亦然。如果兩個字段都沒有更改,則不應驗證。任何幫助將不勝感激。下面是代碼:驗證動態創建的字段,當一個被更改

<asp:TemplateField HeaderText="ValidatedDate" SortExpression="ValidatedDate"> 
    <EditItemTemplate> 
     <asp:TextBox ID="txtValDate" Width="100px" MaxLength="10" runat="server" AutoPostBack="true" 
      Text='<%# Bind("ValidatedDate","{0:MM/dd/yyyy}") %>'></asp:TextBox> 
     <asp:RegularExpressionValidator ValidationGroup="g1" ID="RegularExpressionValidator10" 
      runat="server" ControlToValidate="txtValDate" Display="None" ErrorMessage="Validated Date: ##/##/####" 
      ValidationExpression="\d{1,2}/\d{1,2}/\d{4}"></asp:RegularExpressionValidator> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="lblValidatedDate" runat="server" Text='<%# Bind("ValidatedDate","{0:MM/dd/yyyy}")%>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="ProductStatus" SortExpression="ProductStatusDescription"> 
    <EditItemTemplate> 
     <asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="SqlDataSource6" AutoPostBack="true" 
      DataTextField="StatusDescription" DataValueField="StatusID" SelectedValue='<%# Bind("Status") %>'> 
     </asp:DropDownList> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="lblProductStatus" runat="server" Text='<%# Bind("ProductStatusDescription")%>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

我的道歉,該代碼可以是一個有點混亂,沒有正確的上下文。

+0

您是否在代碼隱藏中生成了一些代碼?因爲這看起來像* .ascx片段。如果您在代碼隱藏中添加控件,1)請向我們展示代碼。 2)一定要在'Page_Init()'而不是'Page_OnLoad()'中執行,否則事件不會被綁定。 – 2013-08-28 20:44:41

+0

這裏有代碼隱藏,但是它處理這個信息被放入的gridview(分頁/排序)。這是來自* aspx頁面。我會展示更多代碼,但隨後它會變成敏感內容。我只是在我的智慧結束這一點。除了這一件事以外,一切都很完美。 – Chris

+0

事件是否在動態控件上觸發:從不?只有當直接修改?不被解僱,因爲你沒有附加事件給他們?如果「從不」,請參閱我原來的評論,確保你不會改變頁面結構比你應該... PS - 如果值得被「敏感」,應該值得寫一個簡單的自包含的例子從頭到尾都會出現問題。 – 2013-08-28 20:56:00

回答

0

ebyrob,謝謝你的幫助。然而,我知道它的功能非常好。這是固定它的代碼:

protected void AddError(string errorMessage) 
    { 
     cstValidate.IsValid = false; 
     cstValidate.ErrorMessage = errorMessage; 
     cstValidate.EnableClientScript = false; 
    } 

    protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     TextBox txtValidatedDate = GridView2.Rows[e.RowIndex].FindControl("txtValDate") as TextBox; 
     DropDownList ddlStatusCompare = GridView2.Rows[e.RowIndex].FindControl("dropdownlist4") as DropDownList; 
     if (txtValidatedDate.Text == string.Empty && ddlStatusCompare.SelectedValue == "1") 
     { 
      AddError("Please enter a Validated Date"); 
      e.Cancel = true; 
     } 
     else if (txtValidatedDate.Text != string.Empty && ddlStatusCompare.SelectedValue == "0" 
      || txtValidatedDate.Text != string.Empty && ddlStatusCompare.SelectedValue == "99") 
     { 
      AddError("Please remove the Validated Date"); 
      e.Cancel = true; 
     } 
     if (!e.Cancel) 
      Helpers.LogChanges(GridView2, e, _employeeID, "SaleProducts"); 
    }