Hi @Vishal Suravase ,
After reading your description, I have a few questions:
- 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?
- How do you get the column from your gridview output? What's the meaning of each columns represent ?
- 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:
- 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.
- 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 != " " && 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:
➤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.