DataTable'ten Tablo Oluşturma
Genellikle uygulamanız verileri bir veritabanından çeker ve bunu DataTable biçiminde saklar. Bu verileri belgenize yeni bir tablo olarak kolayca ekleyebilir ve formatlamayı tablonun tamamına hızlı bir şekilde uygulayabilirsiniz.
Aspose.Words’i kullanarak bir veritabanından kolayca veri alabilir ve bunu bir tablo olarak saklayabilirsiniz:
- Document‘nizde yeni bir DocumentBuilder nesnesi oluşturun.
- DocumentBuilder‘i kullanarak yeni bir tablo başlatın.
- DataTable‘teki her sütunun adını başlık satırı olarak eklemek istiyorsak, her veri sütununu yineleyin ve sütun adlarını tablodaki bir satıra yazın.
- DataTable‘deki her DataRow‘i yineleyin:
- DataRow‘teki her nesneyi yineleyin.
- Nesneyi DocumentBuilder kullanarak belgeye ekleyin. Kullanılan yöntem, eklenen nesnenin türüne bağlıdır; örneğin metin için DocumentBuilder.Writeln ve bir görüntüyü temsil eden bayt dizisi için DocumentBuilder.InsertImage.
- DataRow‘in işlenmesinin sonunda, DocumentBuilder.EndRow kullanılarak DocumentBuilder tarafından oluşturulan satırı da sonlandırın.
- DataTable‘teki tüm satırlar işlendikten sonra DocumentBuilder.EndTable‘yi çağırarak tabloyu bitirin.
- Son olarak, formatlamayı tüm tabloya otomatik olarak uygulamak için Table.StyleIdentifier gibi uygun tablo özelliklerinden birini kullanarak istenen tablo stilini ayarlayabiliriz.
ImportTableFromDataTable yöntemi bir DocumentBuilder nesnesini, verileri içeren DataTable‘i ve DataTable‘deki sütun başlığının tablonun üst kısmına dahil edilip edilmeyeceğini belirten bir bayrağı kabul eder. Bu yöntem, oluşturucunun geçerli konumunu ve biçimlendirmesini kullanarak bu parametrelerden bir tablo oluşturur. DataTable
‘ten veri içe aktarmak ve DocumentBuilder’ı kullanarak bu verileri yeni bir tabloya eklemek için bir yöntem sağlar.
Bu örnekte DataTable‘teki aşağıdaki veriler kullanılmıştır:
Aşağıdaki kod örneği, yukarıdaki algoritmanın Aspose.Words’te nasıl yürütüleceğini gösterir:
// 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; | |
} |
Yöntem daha sonra DocumentBuilder‘iniz ve verileriniz kullanılarak kolayca çağrılabilir.
Aşağıdaki kod örneği, verilerin bir DataTable
‘ten nasıl içe aktarılacağını ve belgedeki yeni bir tabloya nasıl ekleneceğini gösterir:
// 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"); |