Costruisci una tabella da un DataTable
Spesso la tua applicazione estrarrà i dati da un database e li memorizzerà sotto forma di DataTable. Puoi inserire facilmente questi dati nel documento come una nuova tabella e applicare rapidamente la formattazione all’intera tabella.
Utilizzando Aspose.Words, puoi facilmente recuperare i dati da un database e archiviarli come tabella:
- Crea un nuovo oggetto DocumentBuilder sul tuo Document.
- Inizia una nuova tabella utilizzando DocumentBuilder.
- Se vogliamo inserire i nomi di ciascuna colonna dal nostro DataTable come riga di intestazione, scorrere ciascuna colonna di dati e scrivere i nomi delle colonne in una riga nella tabella.
- Scorrere ogni DataRow nel DataTable:
- Scorrere ogni oggetto nel DataRow.
- Inserisci l’oggetto nel documento utilizzando DocumentBuilder. Il metodo utilizzato dipende dal tipo di oggetto da inserire, ad esempio DocumentBuilder.Writeln per testo e DocumentBuilder.InsertImage per un array di byte che rappresenta un’immagine.
- Al termine dell’elaborazione del DataRow terminare anche la riga creata dal DocumentBuilder utilizzando DocumentBuilder.EndRow.
- Una volta elaborate tutte le righe del DataTable, termina la tabella chiamando DocumentBuilder.EndTable.
- Infine possiamo impostare lo stile della tabella desiderato utilizzando una delle proprietà della tabella appropriate come Table.StyleIdentifier per applicare automaticamente la formattazione all’intera tabella.
Il metodo ImportTableFromDataTable accetta un oggetto DocumentBuilder, l'DataTable contenente i dati e un flag che specifica se l’intestazione della colonna dell'DataTable è inclusa nella parte superiore della tabella. Questo metodo crea una tabella da questi parametri utilizzando la posizione e la formattazione correnti del generatore. Fornisce un metodo per importare dati dal DataTable
e inserirli in una nuova tabella utilizzando DocumentBuilder.
In questo esempio vengono utilizzati i seguenti dati nel nostro DataTable:
Il seguente esempio di codice mostra come eseguire l’algoritmo sopra in Aspose.Words:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
/// <summary> | |
/// Imports the content from the specified DataTable into a new Aspose.Words Table object. | |
/// The table is inserted at the document builder's current position and using the current builder's formatting if any is defined. | |
/// </summary> | |
public Table ImportTableFromDataTable(DocumentBuilder builder, DataTable dataTable, | |
bool importColumnHeadings) | |
{ | |
Table table = builder.StartTable(); | |
// Check if the columns' names from the data source are to be included in a header row. | |
if (importColumnHeadings) | |
{ | |
// Store the original values of these properties before changing them. | |
bool boldValue = builder.Font.Bold; | |
ParagraphAlignment paragraphAlignmentValue = builder.ParagraphFormat.Alignment; | |
// Format the heading row with the appropriate properties. | |
builder.Font.Bold = true; | |
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center; | |
// Create a new row and insert the name of each column into the first row of the table. | |
foreach (DataColumn column in dataTable.Columns) | |
{ | |
builder.InsertCell(); | |
builder.Writeln(column.ColumnName); | |
} | |
builder.EndRow(); | |
// Restore the original formatting. | |
builder.Font.Bold = boldValue; | |
builder.ParagraphFormat.Alignment = paragraphAlignmentValue; | |
} | |
foreach (DataRow dataRow in dataTable.Rows) | |
{ | |
foreach (object item in dataRow.ItemArray) | |
{ | |
// Insert a new cell for each object. | |
builder.InsertCell(); | |
switch (item.GetType().Name) | |
{ | |
case "DateTime": | |
// Define a custom format for dates and times. | |
DateTime dateTime = (DateTime) item; | |
builder.Write(dateTime.ToString("MMMM d, yyyy")); | |
break; | |
default: | |
// By default any other item will be inserted as text. | |
builder.Write(item.ToString()); | |
break; | |
} | |
} | |
// After we insert all the data from the current record, we can end the table row. | |
builder.EndRow(); | |
} | |
// We have finished inserting all the data from the DataTable, we can end the table. | |
builder.EndTable(); | |
return table; | |
} |
Il metodo può quindi essere facilmente richiamato utilizzando il DocumentBuilder e i dati.
Il seguente esempio di codice mostra come importare i dati da un DataTable
e inserirli in una nuova tabella nel documento:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
// We can position where we want the table to be inserted and specify any extra formatting to the table. | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// We want to rotate the page landscape as we expect a wide table. | |
doc.FirstSection.PageSetup.Orientation = Orientation.Landscape; | |
DataSet ds = new DataSet(); | |
ds.ReadXml(MyDir + "List of people.xml"); | |
// Retrieve the data from our data source, which is stored as a DataTable. | |
DataTable dataTable = ds.Tables[0]; | |
// Build a table in the document from the data contained in the DataTable. | |
Table table = ImportTableFromDataTable(builder, dataTable, true); | |
// We can apply a table style as a very quick way to apply formatting to the entire table. | |
table.StyleIdentifier = StyleIdentifier.MediumList2Accent1; | |
table.StyleOptions = TableStyleOptions.FirstRow | TableStyleOptions.RowBands | TableStyleOptions.LastColumn; | |
// For our table, we want to remove the heading for the image column. | |
table.FirstRow.LastCell.RemoveAllChildren(); | |
doc.Save(ArtifactsDir + "WorkingWithTables.BuildTableFromDataTable.docx"); |