I have a webdatagrid two template fields... textboxes.. when the user enters a value in the first one and then goes to the second one, I need to make sure the second value is not greater then the first value...
Can someone help with some client side script to do this?
If you continue to experience any issues please do not hesitate to contact me.
Sorry haven't gotten back to you.
Looking at your javascript code..
What field are you referring to in this line.
getElementsByTagName("input")[0].value
Also, i tried your sample project..
It doesn't work.. did you try it???
here is your sample without the server side data load..
here is the aspx code.. IT DOESN'T WORK???
<%@ Page Title="Home Page" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication2._Default" %><%@ Register Assembly="Infragistics4.Web.v12.2, Version=12.2.20122.2166, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" Namespace="Infragistics.Web.UI.GridControls" TagPrefix="ig" %><asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content><asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <script type="text/javascript" id="igClientScript"> function textboxTextChanged(sender, eventArgs) { if (sender.parentNode._object.get_row().get_cellByColumnKey("TemplateField_0").get_element().getElementsByTagName("TextBox1")[0].value < sender.value) { sender.value = ""; } } </script> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <ig:WebDataGrid ID="WebDataGrid1" runat="server" Height="350px" Width="737px"> <Columns> <ig:TemplateDataField Key="TemplateField_0"> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Width="50px"></asp:TextBox> </ItemTemplate> <Header Text="FirstTextBoxTemplateField"></Header> </ig:TemplateDataField> <ig:TemplateDataField Key="TemplateField_1"> <ItemTemplate> <asp:TextBox ID="TextBox2" runat="server" onchange="textboxTextChanged(this, event)"> </asp:TextBox> </ItemTemplate> <Header Text="SeccondTextBoxTemplateField"></Header> </ig:TemplateDataField> </Columns> <Behaviors> <ig:Selection> </ig:Selection> </Behaviors> </ig:WebDataGrid></asp:Content>
Hello Daryl,
The code sample works fine on my configuration. Here are several suggestions to help you run the sample: In order to maintain a low zip file size, I have deleted the ig_res folder. It is common practice. The CSS files, responsible for the stilling of the Infragistics Controls could be found in the ig_res folder, that is created when the Design button in Visual Studio is clicked OR an Infragistics Control is initially added in DesignView.The DataSource of the code sample is located in its CodeBehind file and it is a DataTable. I suggest you bind the controls to your own data source, that is required for the application you develop.
About the function: .getElementsByTagName("input") returns the rendered HTML Tag by its name. This is the element the TextBox is rendered as, when the HTML is generated. It is OK not to modify it. Since the TextBox is in a Template the generated TextBox for every row of the TemplatedColumn has a ClientID, that is unique and different from the TextBox ID property. In your case “txtShelfPrice”. Additionally I have updated the function, to ensure correct behavior by wrapping the input elements values in parseInt(string) function.
I will be waiting for your feedback on it. Please keep me updated on how this works for you and if you need more information.
using your updates sample i still get the following error..
Microsoft JScript runtime error: Unable to get value of the property 'get_row': object is null or undefined
<script type="text/javascript" id="igClientScript"> function textboxTextChanged(sender, eventArgs) { if (parseInt(sender.parentNode._object.get_row().get_cellByColumnKey("TemplateField_0").get_element().getElementsByTagName("input")[0].value) < parseInt(sender.value)) { sender.value = ""; } }
Could this be an issue because I have a master child page setup?
<ig:WebDataGrid ID="WebDataGrid1" runat="server" Height="350px" Width="737px"> <Columns> <ig:TemplateDataField Key="TemplateField_0"> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Width="50px"></asp:TextBox> </ItemTemplate> <Header Text="FirstTextBoxTemplateField"></Header> </ig:TemplateDataField> <ig:TemplateDataField Key="TemplateField_1"> <ItemTemplate> <asp:TextBox ID="TextBox2" runat="server" onchange="textboxTextChanged(this, event)"> </asp:TextBox> </ItemTemplate> <Header Text="SeccondTextBoxTemplateField"></Header> </ig:TemplateDataField> </Columns> <Behaviors> <ig:Selection> </ig:Selection> </Behaviors> </ig:WebDataGrid>
Also, I have all the requisite files and such already... ig_res, etc.. and the code behind works fine.
Thank you for your response and for posting in our forum.
I have resolved the issue thanks.
I am checking about the progress of this issue. Please let me know if you need any further assistance on this.
Hello,
I am glad that this function is working for you. Please take in consideration that if the templated Item is modified and other elements are added, the function should be modified in order to select the actual element that the TextBox is rendered as.
You could even consider using a simplified approach as:
function textboxTextChanged(sender, eventArgs) {
if (parseInt(sender.parentNode.parentNode.firstChild.children[0].value) < parseInt(sender.value)) { sender.value = ""; } }
Some checks in the function for the first TextBoxValue are also in order, depending on your application specifications, like:firstTextBoxValue = parseInt(sender.parentNode._object.get_row().get_cellByColumnKey("TemplateField_0").get_element().getElementsByTagName("input")[0].value); if ((firstTextBoxValue == (undefined)) || isNaN(firstTextBoxValue) || (firstTextBoxValue < parseInt(sender.value))) { sender.value = ""; } }
I am really glad that you manage to resolve this issue. Please do not hesitate to contact us if you are still experiencing any issues with this matter.
You know, it might be the difference in the version of the control, between 13.1 and 12.2, but the line you suggested, blew up every time.
However the line below works fine...
if (sender.parentNode.parentElement._object.get_cellByColumnKey("TemplateField_0").get_element().getElementsByTagName("input")[0].value < sender.value) {
Did you actually run your sample and put entry in the textboxes?