?
Solved

accessing textbox in datagrid in javascript

Posted on 2008-10-30
8
Medium Priority
?
946 Views
Last Modified: 2012-05-05
hi all,

hopefully this is a straightforward question. I have a datagrid which displays a number of products. on each line there is a - and + button which i want to be able to adjust the number in a textboxe on the same line. e.g. using the following code;

 <asp:imagebutton OnClick="decrease" id="reduceQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/minus.gif" runat="server"/>
<asp:textbox id="quantity" text-align="center" text="1" width="22px" runat="server"/>
 <asp:imagebutton OnClick="increase" id="increaseQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/plus.gif" runat="server" />

with the javascript

<script type="text/javascript" language="javascript">
    function increase()
    {
        var lbl = document.getElementById('<%=quantity.ClientID%>');

        lbl.value =parseInt(lbl.value) + 1;
      
          return false;
    }
   
    function decrease()
    {
        var lbl = document.getElementById('<%=quantity.ClientID%>');
        if(parseInt(lbl.value) > 1)
        {
            lbl.value =parseInt(lbl.value) - 1;
        }

          return false;
    }

</script>

however it cannot find item at runtime because it is in the datagrid. any ideas how i can get around this?

many thanks,

matt.
0
Comment
Question by:flynny
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
8 Comments
 
LVL 25

Expert Comment

by:apeter
ID: 22844234
You have 2 options.
Very Simple:
          After the page is rendered. View source. See what is rendered in the conrols 'id". Hard code that in your javascript.

Simple.
          Register Your javascript Code from code behind. That way u can get the <textbox>.clientID generated automatically.
0
 

Author Comment

by:flynny
ID: 22848365
ok i see i think i'm going to look at the second method, as because the datagrid can return a different amount of products each time hardcoding isn't really an option.

ok so if i'm registering the code from behine do you mean i need to add the attribute to each button (the - and +) for the onclientclick to be the javascript increase decrease method and pass it the text box directly?

so increase(textbox) /decrease(textbox)

would i do this in the page_load or is there another datagrid specific method i can use. would you be able to provide an example for this please?

many thanks matt.
0
 

Author Comment

by:flynny
ID: 22932762
hi how can i register the javascript to the button if they are in a itemtemplate in the datagrid? i.e.

    <asp:TemplateColumn HeaderText="Quantity">
      <HeaderStyle Font-Bold="True" CssClass="ProductSearchHeader" />
        <ItemTemplate>
            <asp:imagebutton OnClick="decreaseClick" id="reduceQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/minus.gif" runat="server"/>
              <asp:textbox id="quantity" text-align="center" text="1" width="22px" runat="server"/>
              <asp:imagebutton OnClientClick="increase(this)" id="increaseQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/plus.gif" runat="server" />
        </ItemTemplate>
    </asp:TemplateColumn>
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 

Author Comment

by:flynny
ID: 22940296
hi all i think i'm beginning to get somewhere. I've handled the OnItemCreated method to the datagrid and try and find the increase and decrease buttons on each row when its created and assign the onclientclick method then. however i want to also pass a reference to the text box to the javascript method but can't seem to get it working how do i do this please?

i have

    Sub DataGrid_ItemCreated(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
        Dim reduceButton As ImageButton = e.Item.FindControl("reduceQuantity")
        Dim increaseButton As ImageButton = e.Item.FindControl("increaseQuantity")
        Dim quantity As TextBox = e.Item.FindControl("quantity")

        If Not reduceButton Is Nothing Then
            reduceButton.OnClientClick = "return reduce(" + quantity.ClientID + ")"
        End If

        If Not increaseButton Is Nothing Then
            increaseButton.OnClientClick = "return increase(" + quantity.ClientID + ")"
        End If
        'e.Item.Cells(1).BackColor = Drawing.Color.AliceBlue
    End Sub

as the method called when the datagrid is created.

with the javascript method

    function increase(button) {
        alert("HERE OK!");
        alert(document.getElementById(button).value);
      //  button.value = parseInt(button.value) + 1;

        return false;
    }

    function decrease(button) {

        //button.value = parseInt(button.value) - 1;

        return false;
    }

any ideas?
0
 
LVL 25

Expert Comment

by:apeter
ID: 22940855
The code looks fine in the code behind. Now see the view source of the page.

The cilentID ur passing from the datagrid should be same as it is rendered in the button's control ID. If both are same then ur javascript will work fine.
0
 

Author Comment

by:flynny
ID: 22941445
right. almost there i think.

it fails on the

 alert(document.getElementById(button).value);

the reason being it is sendning an array of quantity text boxes to the javascript method. Each of the objects in this array contains a object with and object and id of "quantity" which i assume relates to each text box. Again if i view the source everyone in the row has the identity "quantity" and doesn't seem to be unique.

i suppose i could try and maybe send the row number along with the button to javascript? or is there another way i can send the button? i tried. uniqueID instead of clientid but this didnt work either.
0
 

Author Comment

by:flynny
ID: 22941542
sorry scratch the idea of looking through the array as i just tried hardcoding and will always return the first instance of the textbox and modify that as all are called 'quantity'.

i declare the text box and buttons as follows

    <asp:TemplateColumn HeaderText="Quantity">
      <HeaderStyle Font-Bold="True" CssClass="ProductSearchHeader" />
        <ItemTemplate>
            <asp:imagebutton id="reduceQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/minus.gif" runat="server"/>
              <asp:textbox id="quantity" text-align="center" text="1" width="22px" runat="server"/>
              <asp:imagebutton id="increaseQuantity" ImageAlign=AbsMiddle ImageUrl="~/Images/plus.gif" runat="server" />
        </ItemTemplate>
    </asp:TemplateColumn>

could his problem be because i assign the id? however if i am to remove this how would i then reference the textbox in the method behind?

thanks for all your help.
0
 
LVL 25

Accepted Solution

by:
apeter earned 2000 total points
ID: 22941777
In DataGrid_ItemCreated event , after finding the control,  assign a new ID for the button say like "button" + rowindex and then pass this ID to the jasvascript. So now you can access the buttons uniquely in javascript.
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Suggested Courses
Course of the Month8 days, 3 hours left to enroll

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question