Click here to Skip to main content
15,913,610 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
In excel record as follows

                                    Monday
                                    Sessions

  Date course  session1      session2

              Sub Faculty   Sub Faculty

18-Aug BTech1  A    RJ        B    RK
       BTech2  B    SK        C    SV+MJ

19-Aug BTech4  i    MJ        j    GS
       BTech5  k    RP        l    CB+RJ

I am exporting the above excel records in Gridview as follows.

for that code as follows
C#
protected void btnimport_Click(object sender, EventArgs e)
{
import();
}

C#
private void import()
{
string path = @"C:\FACULTYT.xlsx
GvSch.DataSource = ImportExcelXLS(path, false);
GvSch.DataBind();
GvSch.Visible = true;
}

C#
public static DataSet ImportExcelXLS(string FileName, bool hasHeaders)
{
string HDR = hasHeaders ? "Yes" : "No";
string strConn;
if (FileName.Substring(FileName.LastIndexOf('.')).ToLower() == ".xlsx")
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
else
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\"";

DataSet output = new DataSet();

using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();

DataTable schemaTable = conn.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

foreach (DataRow schemaRow in schemaTable.Rows)
{
string sheet = schemaRow["TABLE_NAME"].ToString();

if (!sheet.EndsWith("_"))
{
try
{
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn);
cmd.CommandType = CommandType.Text;

DataTable outputTable = new DataTable(sheet);
output.Tables.Add(outputTable);
new OleDbDataAdapter(cmd).Fill(outputTable);

DataTable table = new DataTable();
table.Columns.Add("Date", typeof(string));
table.Columns.Add("Course", typeof(string));
table.Columns.Add("Session", typeof(string));
table.Columns.Add("Subject", typeof(string));
table.Columns.Add("Faculty", typeof(string));

int irow = 0;
foreach (DataRow row in outputTable.Rows)
{
if (row[1].ToString() != "Course" && row[1].ToString() != "" && row[1].ToString() != null)
{
DataRow row1 = table.NewRow();
row1["Date"] = row[0].ToString();

row1["Course"] = row[1].ToString();
row1["Session"] = "1";
row1["Subject"] = row[2].ToString();
row1["Faculty"] = row[3].ToString();
if (row[2] != "" && row[3] != "")
table.Rows.Add(row1);
row1 = table.NewRow();
row1["Date"] = row[0].ToString();
row1["Course"] = row[1].ToString();
row1["Session"] = "2";
row1["Subject"] = row[4].ToString();
row1["Faculty"] = row[5].ToString();
if (row[4] != "" && row[5] != "")
table.Rows.Add(row1);
}
irow++;
}
output.Tables.Clear();
output.Tables.Add(table);
}
catch (Exception ex)
{
throw new Exception(ex.Message + string.Format("Sheet:{0}.File:F{1}", sheet, FileName), ex);
}
finally
{

}
}
}
}
return output;
}


When i export the above excel record in to Gridview output as follows
Date         Course    Session     Subject    Faculty

18-Aug-14    BTech1      1          A           RJ
             BTech1      2          B           RK
             BTech2      1          B           SK
             BTech2      2          C           SV+MJ
             BTech4      1          I           MJ
             BTech4      2          J           GS
             BTech5      1          K           RP
             BTech5      2          L           CB+RJ

But in Gridview i want the output as follows, if faculty column have more than one faculty i want to display separtely in gridview.


in gridview i want output as follows, if faculty column have more that one faculty.

Date         Course    Session     Subject    Faculty
18-Aug-14    BTech1      1          A           RJ
             BTech1      2          B           RK
             BTech2      1          B           SK
             BTech2      2          C           SV
             BTech2      2          C           MJ
             BTech4      1          I           MJ
             BTech4      2          J           GS
             BTech5      1          K           RP
             BTech5      2          L           CB
             BTech5      2          L           RJ

from my code what is the mistake i made please help me,

Regards,
Narasiman P.
Posted
Updated 20-Aug-14 19:44pm
v2

1 solution

at the time of assigning Faculty to row1["Faculty"] check that row[3] & row[5] not equal to null and contains '+' or not if contains '+' then split with '+' symbol and add new row to the table.
code looks like

if(row[3].ToString().contains("+"))
{
string[] str=row[3].ToString().split('+');
for(int I=0;i<str.count;i++)>
{
C#
row1["Course"] = row[1].ToString();
row1["Session"] = "1";
row1["Subject"] = row[2].ToString();
row1["Faculty"] =str[I]; 

}
}
else
{
XML
<pre lang="cs">row1[&quot;Course&quot;] = row[1].ToString();
row1[&quot;Session&quot;] = &quot;1&quot;;
row1[&quot;Subject&quot;] = row[2].ToString();


row1["Faculty"] = row[3].ToString();

}
 
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