إنشاء جدول من DataTable
غالبًا ما يقوم تطبيقك بسحب البيانات من قاعدة البيانات وتخزينها في شكل DataTable. يمكنك بسهولة إدراج هذه البيانات في مستندك كجدول جديد وتطبيق التنسيق بسرعة على الجدول بأكمله.
باستخدام Aspose.Words، يمكنك بسهولة استرداد البيانات من قاعدة البيانات وتخزينها كجدول:
- قم بإنشاء كائن DocumentBuilder جديد على Document الخاص بك.
- ابدأ جدولاً جديدًا باستخدام DocumentBuilder.
- إذا أردنا إدراج أسماء كل عمود من الأعمدة من DataTable كصف رأس، فقم بالتكرار خلال كل عمود بيانات واكتب أسماء الأعمدة في صف في الجدول.
- قم بالتكرار خلال كل DataRow في ملف DataTable:
- قم بالتكرار خلال كل كائن في DataRow.
- أدخل الكائن في المستند باستخدام DocumentBuilder. تعتمد الطريقة المستخدمة على نوع الكائن الذي يتم إدراجه، على سبيل المثال DocumentBuilder.Writeln للنص وDocumentBuilder.InsertImage لمصفوفة البايت التي تمثل صورة.
- في نهاية معالجة DataRow، قم أيضًا بإنهاء الصف الذي تم إنشاؤه بواسطة DocumentBuilder باستخدام DocumentBuilder.EndRow.
- بمجرد معالجة جميع الصفوف من DataTable، قم بإنهاء الجدول عن طريق الاتصال بـ DocumentBuilder.EndTable.
- أخيرًا، يمكننا ضبط نمط الجدول المطلوب باستخدام إحدى خصائص الجدول المناسبة مثل Table.StyleIdentifier لتطبيق التنسيق تلقائيًا على الجدول بأكمله.
تقبل طريقة ImportTableFromDataTable كائن DocumentBuilder، وDataTable الذي يحتوي على البيانات وعلامة تحدد ما إذا كان عنوان العمود من DataTable متضمنًا في أعلى الجدول. تقوم هذه الطريقة بإنشاء جدول من هذه المعلمات باستخدام الموقع الحالي للمنشئ وتنسيقه. يوفر طريقة لاستيراد البيانات من DataTable
وإدراجها في جدول جديد باستخدام DocumentBuilder.
يتم استخدام البيانات التالية في DataTable الخاص بنا في هذا المثال:
يوضح مثال التعليمات البرمجية التالي كيفية تنفيذ الخوارزمية المذكورة أعلاه في 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; | |
} |
يمكن بعد ذلك استدعاء الطريقة بسهولة باستخدام DocumentBuilder والبيانات الخاصة بك.
يوضح مثال التعليمات البرمجية التالي كيفية استيراد البيانات من DataTable
وإدراجها في جدول جديد في المستند:
// 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"); |