Answered by:
Trying to convert rows to columns using c#

Question
-
User-471420332 posted
Below is my code which I am using
private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Add columns by looping rows // Header row's first column is same as in inputTable outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString()); // Header row's second column onwards, 'inputTable's first column taken foreach (DataRow inRow in inputTable.Rows) { string newColName = inRow[0].ToString(); DataColumnCollection columns = outputTable.Columns; if (!columns.Contains(newColName))//code to check duplication of columns { outputTable.Columns.Add(newColName); } } // Add rows by looping columns for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++) { DataRow newRow = outputTable.NewRow(); // First column is inputTable's Header row's second column newRow[0] = inputTable.Columns[rCount].ColumnName.ToString(); for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++) { string colValue = inputTable.Rows[cCount][rCount].ToString(); //int rowcount = cCount + 1; //if (cCount <= rowcount) //{ newRow[cCount + 1] = colValue; //**Error here when starts second record** //} } outputTable.Rows.Add(newRow); } //for (int i = outputTable.Rows.Count - 1; i >= 0; i--) for (int j = 0; j < outputTable.Columns.Count;j++) { for (int k = 0; k < outputTable.Rows.Count; k++) { string sdfsdf = outputTable.Rows[k][j].ToString(); if (outputTable.Rows[k][j].ToString() == "0") { DataRow dr = outputTable.Rows[k]; dr.Delete(); } } } outputTable.AcceptChanges(); return outputTable; }
Below is the format data iam getting from xml which iam converting to dataTable as below
dataTable **Columnname value** CANDIDATEID 3215456454454 Last Name demo1 Email demo1@gmail.com Mobile 0000000 Experience in Years null Current Employer null CANDIDATEID 2515456564 Last Name demo2 Email test@gmail.com Mobile 354564654 Experience in Years null Current Employer null
I need output like below :column names(for sample I specified only some columns here i need all the columns which i am getting in datatable )
CandidateId Last Name Email Mobile etc 3215456454454 demo1 demo1@gmail.com 00000000 2515456564 demo2 test@gmail.com 354564654
I am waiting for your valuable reply and thank you in advance for your effort and help in asp.net forum.
Friday, July 6, 2018 12:46 PM
Answers
-
User1992938117 posted
See the sample working code:
public partial class Contact : Page { protected void Page_Load(object sender, EventArgs e) { //Assuming your data is as below DataTable DataTable inputTable = GetTable(); //Get Transposed DataTable with header names as Column_0, Column_1 etc.. DataTable transposedTable = GenerateTransposedTable(inputTable); //Bind to grid for sampling GridView1.DataSource = transposedTable; GridView1.DataBind(); } private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Add columns by prefixing Column_ by looping rows for (int i = 0; i <= inputTable.Rows.Count; i++) { outputTable.Columns.Add("Column_" + i.ToString()); } // Add rows by looping columns for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++) { DataRow newRow = outputTable.NewRow(); // First column is inputTable's Header row's second column newRow[0] = inputTable.Columns[rCount].ColumnName.ToString(); for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++) { string colValue = inputTable.Rows[cCount][rCount].ToString(); newRow[cCount + 1] = colValue; } outputTable.Rows.Add(newRow); } return outputTable; } /// <summary> /// To get sample data in Datatable /// </summary> /// <returns></returns> private static DataTable GetTable() { // Here we create a DataTable with four columns. DataTable table = new DataTable(); table.Columns.Add("CANDIDATEID", typeof(Int64)); table.Columns.Add("Last Name", typeof(string)); table.Columns.Add("Email", typeof(string)); table.Columns.Add("Mobile", typeof(string)); table.Columns.Add("Experience in Years", typeof(Int32)); table.Columns.Add("Current Employer", typeof(string)); // Here we add five DataRows. table.Rows.Add(3215456454454, "demo1", "demo1@gmail.com", "0000000", null, null); table.Rows.Add(2515456564, "demo2", "demo3@gmail.com", "354564654", null, null); return table; } }
Credit: https://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Friday, July 6, 2018 1:22 PM -
User-1171043462 posted
Refer
Rotate DataTable - Convert DataTable Columns to Rows and Rows to Columns using C# and VB.Net
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Friday, July 6, 2018 2:15 PM
All replies
-
User1992938117 posted
See the sample working code:
public partial class Contact : Page { protected void Page_Load(object sender, EventArgs e) { //Assuming your data is as below DataTable DataTable inputTable = GetTable(); //Get Transposed DataTable with header names as Column_0, Column_1 etc.. DataTable transposedTable = GenerateTransposedTable(inputTable); //Bind to grid for sampling GridView1.DataSource = transposedTable; GridView1.DataBind(); } private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Add columns by prefixing Column_ by looping rows for (int i = 0; i <= inputTable.Rows.Count; i++) { outputTable.Columns.Add("Column_" + i.ToString()); } // Add rows by looping columns for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++) { DataRow newRow = outputTable.NewRow(); // First column is inputTable's Header row's second column newRow[0] = inputTable.Columns[rCount].ColumnName.ToString(); for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++) { string colValue = inputTable.Rows[cCount][rCount].ToString(); newRow[cCount + 1] = colValue; } outputTable.Rows.Add(newRow); } return outputTable; } /// <summary> /// To get sample data in Datatable /// </summary> /// <returns></returns> private static DataTable GetTable() { // Here we create a DataTable with four columns. DataTable table = new DataTable(); table.Columns.Add("CANDIDATEID", typeof(Int64)); table.Columns.Add("Last Name", typeof(string)); table.Columns.Add("Email", typeof(string)); table.Columns.Add("Mobile", typeof(string)); table.Columns.Add("Experience in Years", typeof(Int32)); table.Columns.Add("Current Employer", typeof(string)); // Here we add five DataRows. table.Rows.Add(3215456454454, "demo1", "demo1@gmail.com", "0000000", null, null); table.Rows.Add(2515456564, "demo2", "demo3@gmail.com", "354564654", null, null); return table; } }
Credit: https://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Friday, July 6, 2018 1:22 PM -
User-1171043462 posted
Refer
Rotate DataTable - Convert DataTable Columns to Rows and Rows to Columns using C# and VB.Net
- Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
Friday, July 6, 2018 2:15 PM -
User-471420332 posted
Thanks for the replay but in my case i have dataTable with multiple records in the sample(which you have given https://www.aspsnippets.com/Articles/Rotate-DataTable---Convert-DataTable-Columns-to-Rows-and-Rows-to-Columns-using-C-and-VBNet.aspx) we have only single records
please help to solve the issue i need to bind rows to columns having multiple rows means I get candidate details of 2 persons in
horizontal
Candidate Id 5435656
Name demo
email demo@test.com
Candidate Id 5435657
Name demo2
email demo2@test.com
now I need this below format
candidateId name email
5435656 demo demo@test.com
5435657 demo2 demo2@test.com
Your sample has only single rows converting to columns I tried with the below code
private DataTable GenerateTransposedTable(DataTable inputTable)
{
DataTable outputTable = new DataTable();
// Add columns by looping rows
// Header row's first column is same as in inputTable
outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());
// Header row's second column onwards, 'inputTable's first column taken
foreach (DataRow inRow in inputTable.Rows)
{
string newColName = inRow[0].ToString();
DataColumnCollection columns = outputTable.Columns;
if (!columns.Contains(newColName))//code to check duplication of columns
{
outputTable.Columns.Add(newColName);
}
}
// Add rows by looping columns
for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++)
{
DataRow newRow = outputTable.NewRow();
// First column is inputTable's Header row's second column
newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
{
string colValue = inputTable.Rows[cCount][rCount].ToString();
int colmcount = outputTable.Columns.Count;
newRow[cCount + 1] = colValue;//error comes here when second record starts loop columns does not belong
}
outputTable.Rows.Add(newRow);
}
outputTable.AcceptChanges();
return outputTable;
}Please do replay Waiting worked on other samples like linq but It does not full fill my requrimenet I get 2 different tables if I use Linq but i need the below format in single table
candidateId name email
5435656 demo demo@test.com
5435657 demo2 demo2@test.com
Monday, July 9, 2018 1:03 PM -
User1992938117 posted
Have you tried this one !
If you need Herder names fixed and you know the names then add at below line
// Add columns by prefixing Column_ by looping rows for (int i = 0; i <= inputTable.Rows.Count; i++) { outputTable.Columns.Add("Column_" + i.ToString()); }
Add columns one by one
outputTable.Columns.Add("candidateId"); outputTable.Columns.Add("name"); outputTable.Columns.Add("email");
Monday, July 9, 2018 1:40 PM -
User-471420332 posted
Iam getting table as below
val CANDIDATEID Candidate ID Last Name Mobile CANDIDATEID Candidate ID Last Name Mobile FL_Text 3265655 245048 demo1 9554441515 3254500 7179 demo2 9985633344 row_Id 0 0 0 0 1 1 1 1 But I need the second record in the second row code I tried
private DataTable GenerateTransposedTable(DataTable inputTable)
{
DataTable outputTable = new DataTable();
// Add columns by prefixing Column_ by looping rows
for (int i = 0; i <= inputTable.Rows.Count; i++)
{
outputTable.Columns.Add("Column_" + i.ToString());
}
//outputTable.Columns.Add("Candidate ID");
//outputTable.Columns.Add("Last Name");
//outputTable.Columns.Add("Mobile");
//outputTable.Columns.Add("Email");
// Add rows by looping columns// for (int i = 0; i < inputTable.Columns.Count; i++)
//{
////for (int i = 0; i < inputTable.Columns.Count; i++)
////{
// outputTable.Rows.Add();
// outputTable.Rows[i][0] = inputTable.Columns[i].ColumnName;
//}//for (int i = 0; i < inputTable.Columns.Count-1; i++)
//{
// //DataRow newRow = outputTable.NewRow();
// for (int j = 0; j < inputTable.Rows.Count-1; j++)
// {
// if (i == 1)
// {
// string colValue = inputTable.Rows[j][i].ToString();
// //newRow[j + 1] = colValue;
// //outputTable.Rows[]
// for (int k = 0; k < outputTable.Columns.Count-1; k++)
// {
// //newRow[k + 1] = colValue;
// outputTable.Rows[k][j+1]=inputTable.Rows[j][i];
// }
// }
// }
//}
for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++)
{
DataRow newRow = outputTable.NewRow();// First column is inputTable's Header row's second column
newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
{
string colValue = inputTable.Rows[cCount][rCount].ToString();
newRow[cCount + 1] = colValue;
}
outputTable.Rows.Add(newRow);
}
return outputTable;
}Help me to solve the issue I had been struggling from past 3 days were I went wrong ??
Tuesday, July 10, 2018 7:53 AM -
User1992938117 posted
Please try working code
public partial class Contact : Page { protected void Page_Load(object sender, EventArgs e) { //Assuming your data is as below DataTable DataTable inputTable = GetTable(); //Get Transposed DataTable with header names as Column_0, Column_1 etc.. DataTable transposedTable = GenerateTransposedTable(inputTable); //Bind to grid for sampling GridView1.DataSource = transposedTable; GridView1.DataBind(); } private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Add columns in output table outputTable.Columns.Add("Candidate ID"); outputTable.Columns.Add("Last Name"); outputTable.Columns.Add("Mobile"); outputTable.Columns.Add("Email"); for (int tRowIndex = 0; tRowIndex <= inputTable.Rows.Count - 1;) { DataRow newRow = outputTable.NewRow(); outputTable.Rows.Add(new object[] { inputTable.Rows[tRowIndex][1], //to add value in Candidate ID column inputTable.Rows[tRowIndex + 1][1], //to add value in Last Name column inputTable.Rows[tRowIndex + 2][1], //to add value in Mobile column inputTable.Rows[tRowIndex + 3][1] //to add value in Email column }); tRowIndex = tRowIndex + 4; //Count of columns } return outputTable; } /// <summary> /// To get sample data in Datatable /// </summary> /// <returns></returns> private static DataTable GetTable() { // Here we create a DataTable with four columns. DataTable table = new DataTable(); table.Columns.Add("ColumnName", typeof(string)); table.Columns.Add("Value", typeof(string)); // Here we add 4 DataRows for first set of data table.Rows.Add("CANDIDATEID", "3215456454454"); table.Rows.Add("Last Name", "demo1"); table.Rows.Add("Email", "demo1@gmail.com"); table.Rows.Add("Mobile", "0000000"); // Here we add 4 DataRows for next set of data table.Rows.Add("CANDIDATEID", "234567"); table.Rows.Add("Last Name", "demo2"); table.Rows.Add("Email", "demo2@gmail.com"); table.Rows.Add("Mobile", "0000233000"); return table; } }
Tuesday, July 10, 2018 9:22 AM