Multiplication and Sum in GridView ASP.Net C#

Vishal Suravase 21 Reputation points
2021-09-08T05:34:40.64+00:00

I have a datatable which is bound to GridView datasource as follows.

Overall I want to Multiply 'Quantity' column value with 'Part1 qty' column value until 'column5' cell value is repeating and so on the result of operation should appear underneath the value as highlighted in red for understanding.!

My Gridview Output

130585-gridviewoutput.jpg

I want Following Output

130621-required-output.jpg

What I have done so far is

protected void GridView1_DataBound(object sender, EventArgs e)  
        {  
            int gridViewCellCount = GridView1.Rows[0].Cells.Count;  
            string[] columnNames = new string[gridViewCellCount];  
            for (int k = 0; k < gridViewCellCount; k++)  
            {  
                columnNames[k] = ((System.Web.UI.WebControls.DataControlFieldCell)(GridView1.Rows[0].Cells[k])).ContainingField.HeaderText;  
            }  
  
            for (int i = GridView1.Rows.Count - 1; i > 0; i--)  
            {  
                GridViewRow row = GridView1.Rows[i];  
                GridViewRow previousRow = GridView1.Rows[i - 1];  
                  
                var result = Array.FindIndex(columnNames, element => element.EndsWith("QTY"));  
                var Arraymax=columnNames.Max();  
                int maxIndex = columnNames.ToList().IndexOf(Arraymax);  
                decimal MultiplicationResult=0;  
                int counter = 0;  
  
                for (int j = 8; j < row.Cells.Count; j++)  
                {  
                    if (row.Cells[j].Text == previousRow.Cells[j].Text)  
                    {  
                        counter++;  
                        if (row.Cells[j].Text != "&nbsp;" && result < maxIndex)  
                        {  
                            var Quantity = GridView1.Rows[i].Cells[1].Text;  
                            var GLQuantity = GridView1.Rows[i].Cells[result].Text;  
                            var PreviousQuantity= GridView1.Rows[i-1].Cells[1].Text;  
                            var PreviousGLQuantity= GridView1.Rows[i-1].Cells[result].Text;  
                            //var Quantity = dt.Rows[i].ItemArray[1];  
                            //var GLQuantity = dt.Rows[i].ItemArray[Convert.ToInt64(result)].ToString();  
                            var GLQ = GLQuantity.TrimEnd(new Char[] { '0' });  
                            var PGLQ = PreviousGLQuantity.TrimEnd(new char[] { '0' });  
                            if (GLQ == "")  
                            {  
                                GLQ = 0.ToString();  
                            }  
                            if (PGLQ == "")  
                            {  
                                PGLQ = 0.ToString();  
                            }  
  
                            MultiplicationResult = Convert.ToDecimal(Quantity) * Convert.ToDecimal(GLQ) + Convert.ToDecimal(PreviousQuantity)*Convert.ToDecimal(PGLQ);  
  
                            object o = dt.Rows[i].ItemArray[j] + " " + MultiplicationResult.ToString();  
                              
                            GridView1.Rows[i].Cells[j].Text = o.ToString();  
                            GridView1.Rows[i].Cells[j].Text.Replace("\n", "<br/>");  
                            result++;  
  
                        }  
                        else  
                            result++;  
  
                        if (previousRow.Cells[j].RowSpan == 0)  
                        {  
                            if (row.Cells[j].RowSpan == 0)  
                            {  
                                previousRow.Cells[j].RowSpan += 2;  
                                 
                            }  
                            else  
                            {  
                                previousRow.Cells[j].RowSpan = row.Cells[j].RowSpan + 1;  
  
                            }  
                            row.Cells[j].Visible = false;  
  
                        }  
  
                         
                    }  
  
                    else  
                        result++;  
                }  
            }  
             
        }  

Thanks In advance..

ASP.NET
ASP.NET
A set of technologies in the .NET Framework for building web applications and XML web services.
3,369 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,493 questions
0 comments No comments
{count} votes

Accepted answer
  1. Lan Huang-MSFT 27,796 Reputation points Microsoft Vendor
    2021-09-09T01:29:32.863+00:00

    Hi @Vishal Suravase ,
    After reading your description, I have a few questions:

    1. According to your output in the column5, the value is to plus Quantity* part1 qty group by column5. But however, the value isn't just like 207. How do you calcalate? What's group by of Column1 is 4 and 5?
    2. How do you get the column from your gridview output? What's the meaning of each columns represent ?
    3. The two tables you provided do not seem to correspond.
      Could you post your details to us?

    Edit
    According to your description,I found some questions of your codes:

    1. In your codes,You have row span 8-11 columns. However, In your output you need, you need only 5-7 columns. So, you need for each j from 5.
    2. In your codes,your "QTY" column index must more than "Quantity" column. So,you result must more than maxIndex.

    I made a modification according to your code, you can refer to it:

    Code:

    protected void GridView1_DataBound(object sender, EventArgs e)  
            {  
                int gridViewCellCount = GridView1.Rows[0].Cells.Count;  
                string[] columnNames = new string[gridViewCellCount];  
                for (int k = 0; k < gridViewCellCount; k++)  
                {  
                    columnNames[k] = ((System.Web.UI.WebControls.DataControlFieldCell)(GridView1.Rows[0].Cells[k])).ContainingField.HeaderText;  
                }  
      
                for (int i = GridView1.Rows.Count - 1; i > 0; i--)  
                {  
                    GridViewRow row = GridView1.Rows[i];  
                    GridViewRow previousRow = GridView1.Rows[i - 1];  
      
                    var result = Array.FindIndex(columnNames, element => element.EndsWith("qty"));  
                    var Arraymax = columnNames.Max();  
                    int maxIndex = columnNames.ToList().IndexOf(Arraymax);  
                    decimal MultiplicationResult = 0;   
                    decimal currentCellResult = 0;  
                    int counter = 0;  
      
                    for (int j = 5; j < 8; j++)  
                    {  
                        var defaultvalue = row.Cells[j].Text.ToString();  
                        var defaultvalueArray = defaultvalue.Split(' ');  
                        var originalMultiplicationResult = defaultvalueArray.Count() == 2 ? defaultvalueArray.Last() : "0";  
                        var originalCellValue = defaultvalueArray.Count() == 2  ? defaultvalueArray .First(): row.Cells[j].Text.ToString();  
                        if (originalCellValue == previousRow.Cells[j].Text)  
                        {  
                            counter++;  
                            if (row.Cells[j].Text != "&nbsp;" && result > maxIndex)  
                            {  
                                var Quantity = GridView1.Rows[i].Cells[1].Text;  
                                var GLQuantity = GridView1.Rows[i].Cells[result].Text;  
                                var PreviousQuantity = GridView1.Rows[i - 1].Cells[1].Text;  
                                var PreviousGLQuantity = GridView1.Rows[i - 1].Cells[result].Text;  
                                var GLQ = GLQuantity.TrimEnd(new Char[] { '0' });  
                                var PGLQ = PreviousGLQuantity.TrimEnd(new char[] { '0' });  
                                if (GLQ == "")  
                                {  
                                    GLQ = 0.ToString();  
                                }  
                                if (PGLQ == "")  
                                {  
                                    PGLQ = 0.ToString();  
                                }  
                                currentCellResult = Convert.ToDecimal(Quantity) * Convert.ToDecimal(GLQ);  
                                MultiplicationResult = currentCellResult + Convert.ToDecimal(PreviousQuantity) * Convert.ToDecimal(PGLQ);  
                                if (row.Cells[j].RowSpan == 0)  
                                {  
                                    DataTable dt = (DataTable)ViewState["dt"];  
                                    object o = dt.Rows[i].ItemArray[j] + " " + MultiplicationResult.ToString();  
                                    previousRow.Cells[j].Text = o.ToString();  
                                }  
                                else  
                                {  
                                    DataTable dt = (DataTable)ViewState["dt"];  
                                    var t = Convert.ToDecimal(originalMultiplicationResult) - Convert.ToDecimal(currentCellResult) + MultiplicationResult;  
                                    object o = dt.Rows[i].ItemArray[j] + " " + t.ToString();  
                                    previousRow.Cells[j].Text = o.ToString();  
                                }  
                                result++;  
      
                            }  
                            else  
                                result++;  
      
                            if (previousRow.Cells[j].RowSpan == 0)  
                            {  
                                if (row.Cells[j].RowSpan == 0)  
                                {  
                                    previousRow.Cells[j].RowSpan +=2;  
                                }  
                                else  
                                {  
                                    previousRow.Cells[j].RowSpan = row.Cells[j].RowSpan + 1;   
                                }  
                                row.Cells[j].Visible = false;  
                            }  
                        }  
      
                        else  
                            result++;  
                    }  
                }  
            }  
    

    Result:
    131594-text.png
    Edit Two
    It is recommended that you use Split(Char, StringSplitOptions) to achieve line break.
    The modified code is as follows:
    replace

    int gridViewCellCount = GridView1.Rows[0].Cells.Count;  
    string[] columnNames = new string[gridViewCellCount];  
    

    to

    int gridViewCellCount = GridView1.Rows[0].Cells.Count;  
    string[] stringSeparators = new string[] { "<br>" };  
    string[] columnNames = new string[gridViewCellCount];  
    

    replace

    var defaultvalueArray = defaultvalue.Split(' ');  
    

    to

    var defaultvalueArray = defaultvalue.Split(stringSeparators, StringSplitOptions.None);  
    

    replace

    object o = dt.Rows[i].ItemArray[j] + " " + MultiplicationResult.ToString();  
    object o = dt.Rows[i].ItemArray[j] + " " + t.ToString();  
    

    to

    object o = dt.Rows[i].ItemArray[j] + stringSeparators[0] + MultiplicationResult.ToString();  
    object o = dt.Rows[i].ItemArray[j]  + stringSeparators[0] + t.ToString();  
    

    Best regards,
    Lan Huang


    If the answer is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our  documentation  to enable e-mail notifications if you want to receive the related email notification for this thread.

    1 person found this answer helpful.

1 additional answer

Sort by: Most helpful
  1. Vishal Suravase 21 Reputation points
    2021-09-24T11:56:13.933+00:00

    Is it possible to implement the same functionality using MVC pattern.

    0 comments No comments