Sunday, March 11, 2012

ValidationGroup in a DetailsView

Sorry meant the CommandField control when I reffered to the Command Control.
It works for me, here is my code:


<asp:DetailsView ID="DetailsView1" Runat="server" DataSourceID="SqlDataSource1"
AutoGenerateRows="False">
<Fields>
<asp:TemplateField SortExpression="CompanyName" HeaderText="CompanyName"><EditItemTemplate>
<asp:RequiredFieldValidator ControlToValidate="TextBox1" Display=Dynamic Runat=Server ValidationGroup=MyValidation ID="validate" ErrorMessage="*********"></asp:RequiredFieldValidator>
<asp:TextBox Runat="server" Text='<%# Eval("CompanyName") %>' ID="TextBox1"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label Runat="server" Text='<%# Eval("CompanyName") %>' ID="Label1"></asp:Label>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox Runat="server" ID="TextBox1"></asp:TextBox>
</InsertItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="ContactName" DataField="ContactName" SortExpression="ContactName"></asp:BoundField>
<asp:BoundField HeaderText="ContactTitle" DataField="ContactTitle" SortExpression="ContactTitle"></asp:BoundField>
<asp:CommandField CausesValidation="true" ShowEditButton="true" ButtonType=Button ValidationGroup="MyValidation" UpdateText="Update"></asp:CommandField>
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT [CompanyName], [ContactName], [ContactTitle] FROM [Customers]"
ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
</asp:SqlDataSource>

Hi Fredrik,

Thanks for your reply, initially after reading your response, I thought I had just missed the CausesValidation attribute, looking further I have isolated the problem a little further.

When using a detailsview in isolation, as per your example, validation works fine, but if I have a Gridview and Select an Item from the Gridview to drive the data selected in the detailsview (via the control parameter), validation within the DetailsView no longer works.

Here is my code:

<asp:gridview id="GridView1" runat="server" datasourceid="GridViewObjectDataSource" autogeneratecolumns="False" allowpaging="True" allowsorting="True" datakeynames="CategoryId">
<columns>
<asp:commandfield showselectbutton="True"></asp:commandfield>
<asp:boundfield headertext="CategoryId" datafield="CategoryId" sortexpression="CategoryId"></asp:boundfield>
<asp:boundfield headertext="Category" datafield="Category" sortexpression="Category"></asp:boundfield>
<asp:boundfield headertext="Description" datafield="Description" sortexpression="Description"></asp:boundfield>
</columns>
</asp:gridview
<asp:objectdatasource id="GridViewObjectDataSource" runat="server" typename="Test.Business.Entity.Category" selectmethod="DisplayAll">
</asp:objectdatasource>
<br />
<asp:detailsview id="DetailsView1" runat="server" datasourceid="DetailsViewObjectDataSource"
autogeneraterows="False">
<fields>
<asp:BoundField HeaderText="CategoryID" DataField="CategoryID" InsertVisible="False" SortExpression="CategoryID">
</asp:BoundField>
<asp:TemplateField SortExpression="Category" HeaderText="Category">
<EditItemTemplate>
<asp:TextBox ID="Upd_C_Category" CssClass="TextBox" Runat="server" Text='<%# Eval("Category")%>'>
</asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="Category" ControlToValidate="Upd_C_Category" ErrorMessage="Category is a required field." ID="valUpd_C_Category" Runat="Server" EnableClientScript="true" />
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="Dsp_C_Category" CssClass="TextBox" Runat="server" Text='<%# Eval("Category")%>' Enabled="False">
</asp:TextBox>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="Ins_C_Category" CssClass="TextBox" Runat="server" >
</asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="Category" ControlToValidate="Ins_C_Category" ErrorMessage="Category is a required field." ID="valIns_C_Category" Runat="Server" EnableClientScript="true" />
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Description" HeaderText="Description">
<EditItemTemplate>
<asp:TextBox ID="Upd_C_Description" Runat="server" Text='<%# Eval("Description")%>' CssClass="TextBox" TextMode="MultiLine">
</asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="Category" ControlToValidate="Upd_C_Description" ErrorMessage="Description is a required field." ID="valUpd_C_Description" Runat="Server" EnableClientScript="true" />
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="Dsp_C_Description" Runat="server" Text='<%# Eval("Description")%>' CssClass="TextBox" Enabled="False" TextMode="MultiLine">
</asp:TextBox>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="Ins_C_Description" Runat="server" TextMode="MultiLine">
</asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="Category" ControlToValidate="Ins_C_Description" ErrorMessage="Description is a required field." CssClass="TextBox" ID="valIns_C_Description" Runat="Server" EnableClientScript="true" />
</InsertItemTemplate>
</asp:TemplateField>
<asp:commandfield CausesValidation="true" ValidationGroup="Category" showdeletebutton="True" showinsertbutton="True" showeditbutton="True"></asp:commandfield>
</fields>
</asp:detailsview>
<asp:objectdatasource id="DetailsViewObjectDataSource" runat="server" typename="Test.Business.Entity.Category"
selectmethod="Display" deletemethod="Delete" insertmethod="Insert" updatemethod="Update"
dataobjecttypename="Test.Business.EntityObject.CategoryEntityObject">
<deleteparameters>
<asp:parameter type="Int32" name="CategoryId"></asp:parameter>
<asp:parameter type="String" name="Category"></asp:parameter>
<asp:parameter type="String" name="Description"></asp:parameter>
</deleteparameters>
<updateparameters>
<asp:parameter type="Int32" name="CategoryId"></asp:parameter>
<asp:parameter type="String" name="Category"></asp:parameter>
<asp:parameter type="String" name="Description"></asp:parameter>
</updateparameters>
<selectparameters>
<asp:controlparameter name="categoryID" defaultvalue="0" type="Int32" controlid="GridView1"
propertyname="SelectedValue"></asp:controlparameter>
</selectparameters>
<insertparameters>
<asp:parameter type="Int32" name="CategoryId"></asp:parameter>
<asp:parameter type="String" name="Category"></asp:parameter>
<asp:parameter type="String" name="Description"></asp:parameter>
</insertparameters>
</asp:objectdatasource></asp:Content
Thanks very much

Jarrod

Hello,

Did anyone ever find a resolution to this problem? I am using ASP 2.0 and have run into the exact same issue. Any help would be greatly appreciated.

Thanks

Erin


For anyone who has tried to get ValidationGroup to work:

As far as I can see Microsoft does not provide any code examples to show how this actually works.

In my case , I wanted certain Validators from a DetailsGroup to show in the summary and others on the page to show only at that particular event.

For the ones wanted in the summary -Add the ValidationGroup and CausesValidation in the CommandField

<asp:CommandFieldButtonType="Button"ShowDeleteButton="True"ShowEditButton="True"

ShowInsertButton="True"ValidationGroup="DetailsGroup"CausesValidation="true"/></Fields>

Each Validator also needs the ValidationGroup.

<asp:RequiredFieldValidatorID="requireDate2"runat="server"ControlToValidate="theDate"ErrorMessage="Filing Date - format: (mm/dd/yyyy)"ValidationGroup="DetailsGroup">*</asp:RequiredFieldValidator>

And lastly: The ValidationSummary needs the group assigned

<asp:ValidationSummaryid="valSum"DisplayMode="BulletList"runat="server"ShowSummary="True"HeaderText="Please enter a value in the following fields:"ValidationGroup="DetailsGroup"

></asp:ValidationSummary>

If anyone from Microsoft reads this, it would be good if your documentation on ValidationSummary, CausesValidation, and ValidationGroup included an example.

No comments:

Post a Comment