Click here to Skip to main content
15,891,375 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
I have a Dynamic asp Gridview with all columns as template feild TextBox. The columns of the Gridview are also dynamic and column count may vary everytime.

Please find code below
C#
public void FillPoDetails()
       {

           DataTable dt = new DataTable();

           dt = pmdata.createdatatable(int.Parse(Session["OurStyleid"].ToString()), int.Parse(Session["PoPackid"].ToString()));



        GenerateTable(dt.Columns.Count, dt.Rows.Count,dt);

           foreach (DataColumn col in dt.Columns)
           {
               //Declare the bound field and allocate memory for the bound field.
               TemplateField bfield = new TemplateField();

               //Initalize the DataField value.
               bfield.HeaderTemplate = new ArtWebApp.Controls.GridViewTemplate(ListItemType.Header, col.ColumnName);

               //Initialize the HeaderText field value.
               bfield.ItemTemplate = new ArtWebApp.Controls.GridViewTemplate(ListItemType.Item, col.ColumnName);

               //Add the newly created bound field to the GridView.
               GrdDynamic.Columns.Add(bfield);
           }



           GrdDynamic.DataSource = dt;
           GrdDynamic.DataBind();

       }
      public GridViewTemplate(ListItemType type, string colname)
           {
               //Stores the template type.
               _templateType = type;

               //Stores the column name.
               _columnName = colname;
           }

       void ITemplate.InstantiateIn(System.Web.UI.Control container)
           {
               switch (_templateType)
               {
                   case ListItemType.Header:
                       //Creates a new label control and add it to the container.
                       Label lbl = new Label();            //Allocates the new label object.
                       lbl.Text = _columnName;
                       lbl.CssClass = "Headerclass";
                           //Assigns the name of the column in the lable.
                       container.Controls.Add(lbl);        //Adds the newly created label control to the container.
                       break;

                   case ListItemType.Item:
                       //Creates a new text box control and add it to the container.
                       TextBox tb1 = new TextBox();                            //Allocates the new text box object.
                       tb1.DataBinding += new EventHandler(tb1_DataBinding);   //Attaches the data binding event.
                       tb1.Columns =6;                                        //Creates a column with size 4.
                                                                              // tb1.Width = System.Web.UI.WebControls.Unit.Percentage(100);
                       tb1.Width = 100;
                       tb1.Wrap = true;
                       tb1.ID = "txt_" + _columnName;
                       if(_columnName== "ColorTotal")
                       {
                           tb1.CssClass = "ColorTotal";
                       }
                       else if (_columnName == "Color")
                       {
                           tb1.CssClass = "Color";
                       }
                       else
                       {
                           tb1.CssClass = "txtCalQty";
                           tb1.Attributes.Add("onkeypress", "return isNumberKey(event,this)");
                           tb1.Attributes.Add("onkeyup", "sumofQty(this)");
                       }

                       container.Controls.Add(tb1);                            //Adds the newly created textbox to the container.

                       break;


               }
           }


And inorder to get the row total I had added a Javascript function on keydown event and its working clearly

JavaScript
//calculate the sum of qty on keypress
       function sumofQty(objText) {
       
        
           var cell = objText.parentNode;
           
           var row = cell.parentNode;

           var sum = 0;
           var textboxs = row.getElementsByClassName("txtCalQty");

           for (var i = 0; i < textboxs.length; i++)
           {
               sum += parseFloat(textboxs[i].value);
           }
           var textboxtotalqtys = row.getElementsByClassName("ColorTotal");
           textboxtotalqtys[0].value = sum.toString();         

       }



can anyone please help me in finding out the sum of each columns(all same cssclass).and display it in the Sizetotal row because

What I have tried:

I am not able to loop through columns

JavaScript
//calculate the sum of qty on keypress
       function sumofQty(objText) {
       
        
           var cell = objText.parentNode;
           
           var row = cell.parentNode;

           var sum = 0;
                

       }
Posted
Updated 27-Sep-16 22:45pm

1 solution

You can do something like following to get the sum of values from the elements with same css class-
JavaScript
var sum = 0;
$('.YourActualClass').each(function(){
    sum += parseFloat($(this).innerHTML()); 
});

Then assign it to the element you want.

Hope, it helps :)
Please let me know if I am missing anything here.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900