Construire une table à partir d'un DataTable

Contents
[ ]

Souvent, votre application extraira des données d’une base de données et les stockera sous la forme d’un DataTable. Vous pouvez facilement insérer ces données dans votre document en tant que nouveau tableau et appliquer rapidement une mise en forme à l’ensemble du tableau.

En utilisant Aspose.Words, vous pouvez facilement récupérer des données d’une base de données et les stocker sous forme de table:

  1. Créez un nouvel objet DocumentBuilder sur votre Document.
  2. Démarrez une nouvelle table en utilisant DocumentBuilder.
  3. Si nous voulons insérer les noms de chacune des colonnes de notre DataTable comme ligne d’en-tête, parcourez chaque colonne de données et écrivez les noms de colonnes dans une ligne du tableau.
  4. Parcourez chaque DataRow dans le DataTable:
    1. Parcourez chaque objet du DataRow.
    2. Insérez l’objet dans le document à l’aide de DocumentBuilder. La méthode utilisée dépend du type de l’objet inséré, par exemple DocumentBuilder.Writeln pour le texte et DocumentBuilder.InsertImage pour un tableau d’octets qui représente une image.
    3. À la fin du traitement du DataRow, terminez également la ligne créée par le DocumentBuilder en utilisant DocumentBuilder.EndRow.
  5. Une fois que toutes les lignes du DataTable ont été traitées, terminez le tableau en appelant DocumentBuilder.EndTable.
  6. Enfin, nous pouvons définir le style de tableau souhaité en utilisant l’une des propriétés de tableau appropriées telles que Table.StyleIdentifier pour appliquer automatiquement le formatage à l’ensemble du tableau.

La méthode ImportTableFromDataTable accepte un objet DocumentBuilder, le DataTable contenant les données et un indicateur qui spécifie si l’en-tête de colonne du DataTable est inclus en haut du tableau. Cette méthode crée un tableau à partir de ces paramètres en utilisant la position et le formatage actuels du générateur. Fournit une méthode pour importer des données à partir du DataTable et les insérer dans une nouvelle table à l’aide de DocumentBuilder.

Les données suivantes de notre DataTable sont utilisées dans cet exemple:

how-to-build-a-table-from-a-datatable-aspose-words-net

L’exemple de code suivant montre comment exécuter l’algorithme ci-dessus dans 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;
}

La méthode peut ensuite être facilement appelée en utilisant votre DocumentBuilder et vos données.

L’exemple de code suivant montre comment importer les données d’un DataTable et les insérer dans une nouvelle table du document:

// 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");