I have an commandfield and few templatefields. The templatefields have validators attached to it and they show up proper messages when wrong data is selected. However when I click commandfield no error is shown and the event fires even though data is invalid. Morover, I have also checked Page.IsValid on server and all works out well even though data is in invalid state. This the markup:
<asp:TemplateField HeaderText="Exp. Date">
<ItemTemplate>
<asp:Label ID="lblExpiration" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Expiration")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate >
<asp:DropDownList ID="ddlMM" runat="server" ValidationGroup="vgExpDateGrid">
<asp:ListItem Value="-1">MM</asp:ListItem>
<asp:ListItem Value="1" >01</asp:ListItem>
<asp:ListItem Value="2">02</asp:ListItem>
<asp:ListItem Value="3">03</asp:ListItem>
<asp:ListItem Value="4">04</asp:ListItem>
<asp:ListItem Value="5">05</asp:ListItem>
<asp:ListItem Value="6">06</asp:ListItem>
<asp:ListItem Value="7">07</asp:ListItem>
<asp:ListItem Value="8">08</asp:ListItem>
<asp:ListItem Value="9">09</asp:ListItem>
<asp:ListItem Value="10">10</asp:ListItem>
<asp:ListItem Value="11">11</asp:ListItem>
<asp:ListItem Value="12">12</asp:ListItem>
</asp:DropDownList>
<span class="green"></span> /
<asp:DropDownList ID="ddlYY" runat="server" ValidationGroup="vgExpDateGrid">
</asp:DropDownList>
<span class="green"></span>
<asp:RequiredFieldValidator ID="rfvddlMM" ControlToValidate="ddlMM" Display="Dynamic" InitialValue="-1" runat="server" ValidationGroup="vgExpDateGrid">*</asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="rfvddlYY" ControlToValidate="ddlYY" Display="Dynamic" InitialValue="-1" runat="server" ValidationGroup="vgExpDateGrid">*</asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField
UpdateText="Update" CausesValidation="true"
HeaderText="Update" ShowEditButton="true"
EditText="Update <br/>Exp. Date" ButtonType="Link" />
Please do not pay attention to the weird control names and styles. Basically the template field has dropdownlists of year and month. Year's drop down list is populated in rowdatabound event. As you can see validators are attached still commandfield works normally. Can anybody tell me what can be the problem?
At first glance I would say you do not have ValidationGroup="vgExpDateGrid" on asp:CommandField. Change your commandfield to:
<asp:CommandField ValidationGroup="vgExpDateGrid"
UpdateText="Update" CausesValidation="true"
HeaderText="Update" ShowEditButton="true"
EditText="Update <br/>Exp. Date" ButtonType="Link" />
or alternatively remove ValidationGroup from asp:RequiredFieldValidator
Related
I am looking to fill a dropdownlist within a gridview with manual data. Is there anyway to do this through the markup code? I am just trying to fill it with days etc. 1 day(s), 2 day(s), 3 day(s) etc. Here is the code for my drop down
<asp:TemplateField HeaderText="No. Days">
<ItemTemplate>
<asp:DropDownList ID="txtFinishDate" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
I've tried filling it manually on the page load but it doesn't seem to work and I think it is because of the grid view. Sorry if the question seems vague and thanks in advance!
what you have, but you have to add items to the list.
<asp:TemplateField HeaderText="custom">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Text="[ select an item ]" Value="0"></asp:ListItem>
<asp:ListItem Text="yes?" Value="1"></asp:ListItem>
<asp:ListItem Text="no?" Value="2"></asp:ListItem>
<asp:ListItem Text="umm..." Value="3"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
Hello i am trying to validate dropdownlist as it should not have selected item as "--- Pick One ---" by using compare validator but it's not working. Please can any one guide me. It will be very helpful for me.
My code is :-
enter code here
<asp:DropDownList ID="drpdwn_ImDiv" CssClass="inner-dropdown1" runat="server" DataSourceID="SqlDataSource6" DataTextField="Division" DataValueField="Division" AppendDataBoundItems="true">
<asp:ListItem>--- Pick One ---</asp:ListItem>
</asp:DropDownList>
<br />
<asp:CompareValidator ID="CompareValidator1" ControlToValidate="drpdwn_ImDiv" Type="String" ValueToCompare="--- Pick One ---" CssClass="validator" Font-Size="10px" Operator="NotEqual" runat="server" ErrorMessage="CompareValidator"></asp:CompareValidator>`
try this one
<asp:DropDownList ID="drpdwn_ImDiv" CssClass="inner-dropdown1" runat="server" DataSourceID="SqlDataSource6" DataTextField="Division" DataValueField="Division" AppendDataBoundItems="true">
<asp:ListItem>--- Pick One ---</asp:ListItem>
</asp:DropDownList>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Please select" ControlToValidate="drpdwn_ImDiv"
InitialValue="--- Pick One ---"></asp:RequiredFieldValidator>
Start by using a Text and Value property for a ListItem. Then you can use a RequiredFieldValidator to check the empty value of the first ListItem.
<asp:DropDownList ID="drpdwn_ImDiv" runat="server">
<asp:ListItem Text="--- Pick One ---" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="drpdwn_ImDiv"
runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
I have a form with textbox, radiobutton etc. and would like to have a validationgroup attached to some of the input fields when one dropdown changes to a specific value. Is that possible.
lets say i have this form;
<form>
Name:
<asp:textbox runat="server" id="nametextbox" ValidationGroup="myvalgroup"/>
<asp:RequiredFieldValidator id="nametextboxFieldValidator" runat="server" ErrorMessage="Name?" ValidationGroup="myvalgroup" ControlToValidate="nametextbox" />
Gender: <asp:RadioButtonList runat="server" ID="gender" RepeatDirection="Horizontal" ValidationGroup="myvalgroup">
<asp:ListItem Text="Select gender" Value="" Selected="True"/>
<asp:ListItem Text="Male" Value="Male"/>
<asp:ListItem Text="Female" Value="Female"/>
</asp:RadioButtonList>
<asp:RequiredFieldValidator id="genderFieldValidator" runat="server" ErrorMessage="Gender?" ValidationGroup="myvalgroup" ControlToValidate="gender" />
The answer to life the universe and everything:
<asp:textbox runat="server" id="theanswer" />
Are you finished?
<asp:RadioButtonList runat="server" ID="finished" RepeatDirection="Horizontal" onchange="add-validation-group()" >
<asp:ListItem Text="Are you done?" Value="" Selected="True"/>
<asp:ListItem Text="Yes" Value="Yes"/>
<asp:ListItem Text="No" Value="No"/>
<asp:ListItem Text="Absolutly not, i need 600 more years to think!" Value="NOT-IN-600-YEARS"/>
</asp:RadioButtonList>
<asp:button runat="server" id="submitbutton" />
</form>
Codebehind
function add-validation-group()
if (finished.SelectedValue.ToString() == "Yes")
{
theanswer.Attributes.Add("ValidationGroup", "myvalgroup");
}
end
Ok so my codebehind contains a mixup of everything but just to show what i would like to acomplish, sorry for the codemixing!
So can this be done, add validation to inputfields when onchange on a dropdownlist?
Point me in the right direction, please! :)
Finally i found a solution to my question.
Quite simple i might add.
<script type=text/javascript>
$(document).ready(function () {
$("#<%= finished.ClientID %>").change(function () {
if ($('option:selected', this).text() == 'Yes') {
ValidatorEnable(document.getElementById('<%=theanswerValidator.ClientID%>'), true);
}
});
});
</script>
<form>
Name:
<asp:textbox runat="server" id="nametextbox" ValidationGroup="myvalgroup"/>
<asp:RequiredFieldValidator id="nametextboxFieldValidator" runat="server" ErrorMessage="Name?" ValidationGroup="myvalgroup" ControlToValidate="nametextbox" />
Gender: <asp:RadioButtonList runat="server" ID="gender" RepeatDirection="Horizontal" ValidationGroup="myvalgroup">
<asp:ListItem Text="Select gender" Value="" Selected="True"/>
<asp:ListItem Text="Male" Value="Male"/>
<asp:ListItem Text="Female" Value="Female"/>
</asp:RadioButtonList>
<asp:RequiredFieldValidator id="genderFieldValidator" runat="server" ErrorMessage="Gender?" ValidationGroup="myvalgroup" ControlToValidate="gender" />
The answer to life the universe and everything:
<asp:textbox runat="server" id="theanswer" />
<asp:RequiredFieldValidator id="theanswerValidator" Enabled="false" runat="server" ErrorMessage="Your answer?" ValidationGroup="myvalgroup" ControlToValidate="theanswer" />
Are you finished?
<asp:DropDownList runat="server" ID="finished" >
<asp:ListItem Text="Are you done?" Value="" Selected="True"/>
<asp:ListItem Text="Yes" Value="Yes"/>
<asp:ListItem Text="No" Value="No"/>
<asp:ListItem Text="Absolutly not, i need 600 more years to think!" Value="NOT-IN-600-YEARS"/>
</asp:DropDownList>
<asp:button runat="server" id="submitbutton" />
</form>
I added required field validators to theanswer textbox and added Enabled="false" i then track a onchange event with javascript to see if user selects Yes and if they do enable the requiredfieldvalidator.
In my question i had a Radiobuttonlist for the (are you finished?), But changed that to a DropdownList instead for other reasons but i cant think that this is impossible if you have radiobutton list.
OK, it's not in codebehind but it works.
I did try to do it codebehind but it dident feel user friendly to have a Postback on select change.
If someone is intrested in the codebehind method i did it this way, and it worked but (in my opinion not so user friendly)
On my asp:Dropdownlist i added
OnSelectedIndexChanged="finished_SelectedIndexChanged" AutoPostBack="true"
and in my codebehind i added this:
protected void finished_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
if (ddl.SelectedItem.ToString().Equals("Yes"))
{
theanswerValidator.Enabled = true;
}
else // If someone selects yes and then regret it and selects no then disable validator again
{
theanswerValidator.Enabled = false;
}
}
To be brief, I need the Textbox with ID="textComments" to only appear when the dropdown option of 'Other' is selected from the dropdown, and then disappear if another selection is made. I could do this with JS but it needs to be in C#.
<asp:DropDownList runat="server" ID="dropEnquiryType" CssClass="dropdownRequestList">
<asp:ListItem Value="Customer Services" Text="Customer Services"></asp:ListItem>
<asp:ListItem Value="Website" Text="Website"></asp:ListItem>
<asp:ListItem Value="Contract" Text="Contract Hire"></asp:ListItem>
<asp:ListItem Value="Other" Text="Other"></asp:ListItem>
</asp:DropDownList>
<asp:label runat="server" ID="lblComments" AssociatedControlID="textComments" CssClass="textLabel">Comments:</asp:label>
<asp:TextBox runat="server" MaxLength="200" TextMode="MultiLine" Columns="40" Rows="4" ID="textComments" Wrap="true" CssClass="textComments"></asp:TextBox>
And help would be greatly appreciated.
Make the DropDownList first AutoPostBack=true
handle it's SelectedIndexChanged-event
Switch visibility of both controls there
aspx:
<asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="dropEnquiryType_Changed" runat="server" ID="dropEnquiryType" CssClass="dropdownRequestList">
<asp:ListItem Value="Customer Services" Text="Customer Services"></asp:ListItem>
<asp:ListItem Value="Website" Text="Website"></asp:ListItem>
<asp:ListItem Value="Contract" Text="Contract Hire"></asp:ListItem>
<asp:ListItem Value="Other" Text="Other"></asp:ListItem>
</asp:DropDownList>
codebehind:
protected void dropEnquiryType_Changed(Object sender, EventArgs e)
{
lblComments.Visible = dropEnquiryType.SelectedValue == "Other";
textComments.Visible = lblComments.Visible;
}
If you absolutely have to do this within C#, then a simple check in PreRender should be sufficient:
textComments.Visible = (dropEnquiryType.SelectedValue == "Other");
This will also require you to set AutoPostback on dropEnquiryType, though, which uses ... JavaScript!
<asp:TemplateField HeaderText="Division">
<ItemTemplate>
<asp:DropDownList ID="Division" runat="server">
<asp:ListItem Text="Select" Value="Select"></asp:ListItem>
<asp:ListItem Text="Computer" Value="Computer"></asp:ListItem>
<asp:ListItem Text="Electronics" Value="Electronics"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
In i am not able to diplay the selected values in the dropdown which is already in the database.
If you are saying that you want to have the Division value for the row to be selected in the dropdown, you need to bind the SelectedValue property of the DropDownList to the field in your data source that contains the Division value. It would look something like this:
<asp:DropDownList ID="Division" runat="server" SelectedValue='<%# Bind("Division") %>' >
You can use Selected="True" as in:
<asp:ListItem Text="Select" Value="Select" Selected="True"></asp:ListItem>