Buat Tabel dari DataTable
Seringkali aplikasi Anda mengambil data dari database dan menyimpannya dalam bentuk DataTable. Anda dapat dengan mudah memasukkan data ini ke dalam dokumen Anda sebagai tabel baru dan dengan cepat menerapkan pemformatan ke seluruh tabel.
Dengan menggunakan Aspose.Words, Anda dapat dengan mudah mengambil data dari database dan menyimpannya sebagai tabel:
- Buat objek DocumentBuilder baru di Document Anda.
- Mulai tabel baru menggunakan DocumentBuilder.
- Jika kita ingin menyisipkan nama masing-masing kolom dari DataTable kita sebagai baris header, maka lakukan iterasi pada setiap kolom data dan tuliskan nama kolom tersebut ke dalam satu baris dalam tabel.
- Ulangi setiap DataRow di DataTable:
- Ulangi setiap objek di DataRow.
- Masukkan objek ke dalam dokumen menggunakan DocumentBuilder. Metode yang digunakan tergantung pada jenis objek yang dimasukkan misalnya DocumentBuilder.Writeln untuk teks dan DocumentBuilder.InsertImage untuk array byte yang mewakili suatu gambar.
- Di akhir pemrosesan DataRow, akhiri juga baris yang dibuat oleh DocumentBuilder dengan menggunakan DocumentBuilder.EndRow.
- Setelah semua baris dari DataTable diproses, selesaikan tabel dengan memanggil DocumentBuilder.EndTable.
- Terakhir, kita dapat mengatur gaya tabel yang diinginkan menggunakan salah satu properti tabel yang sesuai seperti Table.StyleIdentifier untuk secara otomatis menerapkan pemformatan ke seluruh tabel.
Metode ImportTableFromDataTable menerima objek DocumentBuilder, DataTable yang berisi data dan tanda yang menentukan apakah judul kolom dari DataTable disertakan di bagian atas tabel. Metode ini membuat tabel dari parameter ini menggunakan posisi dan format pembuat saat ini. Menyediakan metode untuk mengimpor data dari DataTable
dan memasukkannya ke dalam tabel baru menggunakan DocumentBuilder.
Data berikut di DataTable kami digunakan dalam contoh ini:
Contoh kode berikut menunjukkan cara menjalankan algoritma di atas di 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; | |
} |
Metode ini kemudian dapat dengan mudah dipanggil menggunakan DocumentBuilder dan data Anda.
Contoh kode berikut menunjukkan cara mengimpor data dari DataTable
dan menyisipkannya ke tabel baru di dokumen:
// 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"); |