2017-12-04 3 views
0

Ich habe diese Tabelle erstellt und das Ergebnis lautet wie folgt.DataTable andere Spalte in Tabelle hinzufügen

enter image description here

Der Code, den ich verwendet, um diese Tabelle zu erstellen, ist wie folgt. und es funktioniert richtig für mich

DataTable dt1 = new DataTable("Table1"); 

dt1.Columns.Add("Num", typeof(Int32)); 
dt1.Columns.Add("date", typeof(string)); 
dt1.Columns.Add("name", typeof(string)); 
dt1.Columns.Add("product1a", typeof(Int32)); 
dt1.Columns.Add("product1b", typeof(Int32)); 
dt1.Columns.Add("total1", typeof(Int32)); 
dt1.Columns.Add("product2a", typeof(Int32)); 
dt1.Columns.Add("product2b", typeof(Int32)); 
dt1.Columns.Add("product2c", typeof(Int32)); 
dt1.Columns.Add("total2", typeof(Int32)); 

object[] o1 = { 1, "10/10/2017", "name 1", 1, 2, 3, 1, 1, 1, 3 }; 
object[] o2 = { 2, "20/10/2017", "name 2", 2, 2, 4, 2, 1, 2, 5 }; 
object[] o3 = { 3, "15/08/2017", "name 3", 1, 3, 4, 4, 0, 0, 4 }; 

dt1.Rows.Add(o1); 
dt1.Rows.Add(o2); 
dt1.Rows.Add(o3);    

var grid = new GridView(); 
grid.DataSource = dt1; 
grid.DataBind(); 

Response.ClearContent(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment; filename=ExportFetsVinculats.xls"); 
Response.ContentType = "application/ms-excel"; 

Response.Charset = ""; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 

grid.RenderControl(htw); 

Response.Output.Write(sw.ToString()); 
Response.Flush(); 
Response.End(); 
return Content(""); 

up richtig hier ist alles, aber man würde die Tabelle der folgenden Art und Weise zu implementieren.

enter image description here

Ist es möglich, mehr Spalten hinzufügen zwei, die als Header handeln?

+0

ich diese wieder in einer Webforms Anwendung ein paar Jahre zu tun hatte, schauen Sie in der RowCreated Event für Ihre gridview Überprüfen Sie dann, ob es sich um eine Kopfzeile handelt, die erstellt wird. Anschließend können Sie eine Tabellenzelle erstellen und anhängen und die Spaltenspan-Eigenschaft auf die Anzahl der Spalten ändern, die Sie zusammenführen möchten. Ich habe keinen Code zur Hand, tut mir leid, aber die zweite akzeptierte Antwort sollte Ihnen helfen. https://forums.asp.net/t/1910325.aspx?Heading+und+subheading+in+gridview –

+0

Danke für die Hilfe, der Link, den Sie mir gegeben haben, war sehr hilfreich. Meine früheren Aussagen waren falsch. Ich lege die Lösung an. – Geo

Antwort

-1

Dies ist der Code mit der einfachen Lösung:

DataTable dt1 = new DataTable("Table1"); 

dt1.Columns.Add("Num", typeof(Int32)); 
dt1.Columns.Add("date", typeof(string)); 
dt1.Columns.Add("name", typeof(string)); 
dt1.Columns.Add("product1a", typeof(Int32)); 
dt1.Columns.Add("product1b", typeof(Int32)); 
dt1.Columns.Add("total1", typeof(Int32)); 
dt1.Columns.Add("product2a", typeof(Int32)); 
dt1.Columns.Add("product2b", typeof(Int32)); 
dt1.Columns.Add("product2c", typeof(Int32)); 
dt1.Columns.Add("total2", typeof(Int32)); 

object[] o1 = { 1, "10/10/2017", "name 1", 1, 2, 3, 1, 1, 1, 3 }; 
object[] o2 = { 2, "20/10/2017", "name 2", 2, 2, 4, 2, 1, 2, 5 }; 
object[] o3 = { 3, "15/08/2017", "name 3", 1, 3, 4, 4, 0, 0, 4 }; 

dt1.Rows.Add(o1); 
dt1.Rows.Add(o2); 
dt1.Rows.Add(o3); 

GridView grid = new GridView();      

grid.DataSource = dt1; 
grid.DataBind(); 

GridView HeaderGrid = grid; 
GridViewRow HeaderGridRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 

TableCell HeaderCell = new TableCell(); 
HeaderCell.Text = ""; 
HeaderCell.ColumnSpan = 3; 
HeaderGridRow.Cells.Add(HeaderCell); 

HeaderCell = new TableCell(); 
HeaderCell.Text = "Head Products 1"; 
HeaderCell.ColumnSpan = 3; 
HeaderCell.Font.Bold = true; 
HeaderCell.HorizontalAlign = HorizontalAlign.Center; 
HeaderGridRow.Cells.Add(HeaderCell); 

HeaderCell = new TableCell(); 
HeaderCell.Text = "Head Products 2"; 
HeaderCell.ColumnSpan = 4; 
HeaderCell.Font.Bold = true; 
HeaderCell.HorizontalAlign = HorizontalAlign.Center; 
HeaderGridRow.Cells.Add(HeaderCell); 

HeaderGrid.Controls[0].Controls.AddAt(0, HeaderGridRow); 

Response.ClearContent(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment; filename=ExportFetsVinculats.xls"); 
Response.ContentType = "application/ms-excel"; 

Response.Charset = ""; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 

grid.RenderControl(htw); 

Response.Output.Write(sw.ToString()); 
Response.Flush(); 
Response.End(); 
return Content(""); 

Oder:

public ActionResult retorna_excel_FetsVinculats2() 
{ 
    DataTable dt1 = new DataTable("Table1"); 

    dt1.Columns.Add("Num", typeof(Int32)); 
    dt1.Columns.Add("date", typeof(string)); 
    dt1.Columns.Add("name", typeof(string)); 
    dt1.Columns.Add("product1a", typeof(Int32)); 
    dt1.Columns.Add("product1b", typeof(Int32)); 
    dt1.Columns.Add("total1", typeof(Int32)); 
    dt1.Columns.Add("product2a", typeof(Int32)); 
    dt1.Columns.Add("product2b", typeof(Int32)); 
    dt1.Columns.Add("product2c", typeof(Int32)); 
    dt1.Columns.Add("total2", typeof(Int32)); 

    object[] o1 = { 1, "10/10/2017", "name 1", 1, 2, 3, 1, 1, 1, 3 }; 
    object[] o2 = { 2, "20/10/2017", "name 2", 2, 2, 4, 2, 1, 2, 5 }; 
    object[] o3 = { 3, "15/08/2017", "name 3", 1, 3, 4, 4, 0, 0, 4 }; 

    dt1.Rows.Add(o1); 
    dt1.Rows.Add(o2); 
    dt1.Rows.Add(o3); 

    GridView grid = new GridView();      

    grid.DataSource = dt1; 
    grid.DataBind(); 

    List<Tuple<string, int, bool, HorizontalAlign>> list_header = new List<Tuple<string, int, bool, HorizontalAlign>>(); 
    list_header.Add(new Tuple<string, int, bool, HorizontalAlign>("", 3, false, HorizontalAlign.Center)); 
    list_header.Add(new Tuple<string, int, bool, HorizontalAlign>("Head Products 1", 3, true, HorizontalAlign.Center)); 
    list_header.Add(new Tuple<string, int, bool, HorizontalAlign>("Head Products 2", 4, true, HorizontalAlign.Center));    

    get_header_table(grid, list_header); 

    Response.ClearContent(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment; filename=ExportFetsVinculats.xls"); 
    Response.ContentType = "application/ms-excel"; 

    Response.Charset = ""; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 

    grid.RenderControl(htw); 

    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
    return Content(""); 
} 

private void get_header_table(GridView grid, List<Tuple<string, int, bool, HorizontalAlign>> list_header) 
{ 
    GridView HeaderGrid = grid; 
    GridViewRow HeaderGridRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert); 

    TableCell HeaderCell = new TableCell(); 

    foreach (Tuple<string, int, bool, HorizontalAlign> item in list_header) 
    { 
     HeaderCell = new TableCell(); 
     HeaderCell.Text = item.Item1; 
     HeaderCell.ColumnSpan = item.Item2; 
     HeaderCell.Font.Bold = item.Item3; 
     HeaderCell.HorizontalAlign = item.Item4; 
     HeaderGridRow.Cells.Add(HeaderCell); 
    } 

    HeaderGrid.Controls[0].Controls.AddAt(0, HeaderGridRow); 
} 
Verwandte Themen