Available in the Full Version
ASP.NET MVC Word Library - Overview
The Infragistics® Word Engine provides a Microsoft .NET API for creating Microsoft Word documents.
This sample uses CTP (Community Technical Preview) features. The API and behavior may change when these features are released with full support.
This sample is designed for a larger screen size.
On mobile, try rotating your screen, view full size, or email to another device.
You can use
this assembly in .NET applications to generate grid data in this document format.
Code View
Copy to Clipboard
@using Infragistics.Web.Mvc
@using IgniteUI.SamplesBrowser.Models
@model IQueryable<IgniteUI.SamplesBrowser.Models.Northwind.Order>
<!DOCTYPE html>
<html>
<head>
<title></title>
<!-- Ignite UI for jQuery Required Combined CSS Files -->
<link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" />
<link href="http://cdn-na.infragistics.com/igniteui/2024.2/latest/css/structure/infragistics.css" rel="stylesheet" />
<script src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js"></script>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script>
<!-- Ignite UI for jQuery Required Combined JavaScript Files -->
<script src="http://cdn-na.infragistics.com/igniteui/2024.2/latest/js/infragistics.core.js"></script>
<script src="http://cdn-na.infragistics.com/igniteui/2024.2/latest/js/infragistics.lob.js"></script>
<style type="text/css">
.export-word-sample fieldset {
margin: 5px;
margin-bottom: 10px;
padding: 10px;
border: 1px solid #CCCCCC;
}
.export-word-sample fieldset label {
display: block;
margin-bottom: 3px;
}
.export-word-sample fieldset input {
margin-bottom: 5px;
float: left;
clear: left;
}
.export-word-sample fieldset label {
float: left;
width: 160px;
padding-top: 2px;
}
.export-word-sample fieldset fieldset {
display: inline-block;
vertical-align: middle;
width: auto;
}
#grid1_container {
margin: 15px auto;
}
.export-word-sample .button-container {
position: relative;
display: inline-block;
vertical-align: middle;
height: auto;
}
</style>
</head>
<body>
@using(Html.BeginForm())
{
<div class="export-word-sample">
<fieldset>
<legend>Export Options</legend>
<fieldset>
<legend>Export Type</legend>
<input type="radio" name="exportType" id="currentPage" value="false" checked="checked" />
<label for="currentPage">Current Page</label>
<input type="radio" name="exportType" id="allPages" value="true" />
<label for="allPages">All Pages</label>
</fieldset>
<div class="button-container">
<input id="btnSubmit" type="submit" value="Export Button" />
</div>
</fieldset>
</div>
<script type="text/javascript">
$(function () {
var grid = $("#grid1"),
pageSize = $("#pageSize"),
pageNumber = $("#pageNumber");
pageNumber.val(0);
pageSize.val(0);
grid.on("iggridrendered", function (e, ui) {
pageSize.val(grid.igGridPaging("option", "pageSize"));
pageNumber.val(grid.igGridPaging("option", "currentPageIndex"));
});
grid.on("iggridpagingpageindexchanged", function (e, ui) {
pageNumber.val(ui.pageIndex);
});
grid.on("iggridpagingpagesizechanged", function (e, ui) {
pageSize.val(ui.pageSize);
pageNumber.val(0);
});
});
</script>
@(Html.Infragistics().Grid(Model).ID("grid1")
.PrimaryKey("OrderID")
.AutoGenerateColumns(false)
.Columns(column =>
{
column.For(x => x.OrderID).HeaderText("Order ID").DataType("number");
column.For(x => x.ContactName).HeaderText("Contact Name");
column.For(x => x.ShipAddress).HeaderText("Shipping Address");
column.For(x => x.OrderDate).HeaderText("Order Date");
}).Features(features =>
{
features.Paging();
}).Height("500").Width("100%").DataSourceUrl(Url.Action("PagingGetData")).DataBind().Render())
<input type="hidden" name="pageSize" id="pageSize" value="" />
<input type="hidden" name="pageNumber" id="pageNumber" value="" />
}
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
#region Word Exporting
using System.IO;
using System.Drawing;
using Infragistics.Web.Mvc;
using Infragistics.Documents.Word;
using IgniteUI.SamplesBrowser.Models.Northwind;
using IgniteUI.SamplesBrowser.Models.Repositories;
#endregion
namespace IgniteUI.SamplesBrowser.Controllers
{
public class InfragisticsWordController : Controller
{
private IEnumerable<Order> orders = null;
// Orders data
private IEnumerable<Order> Orders
{
get
{
try
{
if (orders == null)
orders = RepositoryFactory.GetOrderRepository().Get().Take(100).AsQueryable();
return orders;
}
catch (Exception)
{
return new List<Order>().AsQueryable();
}
}
}
//
// GET: /InfragisticsWord/
[ActionName("create-word-table")]
public ActionResult WordExporter()
{
return View("create-word-table", Orders);
}
[GridDataSourceAction]
[ActionName("PagingGetData")]
public ActionResult PagingGetData()
{
return View("create-word-table", Orders);
}
[HttpPost]
[ActionName("create-word-table")]
public void WordExporter(int pageNumber, int pageSize, bool exportType)
{
pageNumber++;
List<Order> newOrders = Orders.ToList();
bool exportAllPages = exportType;
if (exportAllPages)
{
newOrders = newOrders
.Select(c => new Order
{
OrderID = c.OrderID,
ContactName = c.ContactName,
ShipAddress = c.ShipAddress,
OrderDate = c.OrderDate
})
.ToList();
}
else
{
newOrders = newOrders
.Skip<Order>(pageSize * (pageNumber - 1))
.Take<Order>(pageSize)
.Select(c => new Order
{
OrderID = c.OrderID,
ContactName = c.ContactName,
ShipAddress = c.ShipAddress,
OrderDate = c.OrderDate
})
.ToList();
}
WordExportingModel wordExporter = new WordExportingModel();
wordExporter.PopulateWordDocument(newOrders);
SendForDownload(wordExporter.WordMemoryStream);
}
private void SendForDownload(MemoryStream ms)
{
Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=word.doc");
Response.ContentType = "application/octet-stream";
ms.Seek(0, SeekOrigin.Begin);
ms.CopyTo(Response.OutputStream);
Response.End();
}
#region Word Report Model
class WordExportingModel
{
#region Members
#region Private Members
private WordDocumentWriter wordWriter;
private MemoryStream memStream;
#endregion
#endregion
#region Constructor
public WordExportingModel()
{
memStream = new MemoryStream();
wordWriter = WordDocumentWriter.Create(memStream);
}
public WordExportingModel(MemoryStream ms)
{
memStream = ms;
wordWriter = WordDocumentWriter.Create(memStream);
}
#endregion
#region Properties
public MemoryStream WordMemoryStream
{
get
{
return this.memStream;
}
}
public WordDocumentWriter ExcelWorkbook
{
get
{
return this.wordWriter;
}
}
#endregion
#region Public Methods
public void PopulateWordDocument(List<Order> data)
{
wordWriter.StartDocument();
wordWriter.StartParagraph();
wordWriter.AddTextRun("Congratulations! You have successfully exported igGrid data to Word!");
wordWriter.EndParagraph();
// Create the table properties
TableProperties tableProps = wordWriter.CreateTableProperties();
tableProps.Alignment = ParagraphAlignment.Center;
tableProps.BorderProperties.Color = Color.Black;
tableProps.BorderProperties.Style = TableBorderStyle.Single;
// Create the table header row properties
TableRowProperties headerRowProps = wordWriter.CreateTableRowProperties();
headerRowProps.IsHeaderRow = true;
// Create the table header cell properties
TableCellProperties headerCellProps = wordWriter.CreateTableCellProperties();
headerCellProps.BackColor = Color.DarkGray;
headerCellProps.TextDirection = TableCellTextDirection.LeftToRightTopToBottom;
// Start a table
wordWriter.StartTable(2, tableProps);
// Start a row and apply it the header row properties
wordWriter.StartTableRow(headerRowProps);
// Create header row
AddTableCell(wordWriter, headerCellProps, "Order ID");
AddTableCell(wordWriter, headerCellProps, "Contact Name");
AddTableCell(wordWriter, headerCellProps, "Shipping Address");
AddTableCell(wordWriter, headerCellProps, "Order Date");
// End the header row
wordWriter.EndTableRow();
// Create the table's content cell properties
TableCellProperties contentCellProps = wordWriter.CreateTableCellProperties();
contentCellProps.BackColor = Color.FromArgb(235, 235, 235);
contentCellProps.PreferredWidthAsPercentage = 0.5f;
// Iterate through the grid rows to extract the content data
int i = 0;
foreach (Order order in data)
{
// Alternating row style
if (i % 2 == 1)
contentCellProps.BackColor = Color.White;
else
contentCellProps.BackColor = Color.FromArgb(235, 235, 235);
wordWriter.StartTableRow();
AddTableCell(wordWriter, contentCellProps, order.OrderID.ToString());
AddTableCell(wordWriter, contentCellProps, order.ContactName);
AddTableCell(wordWriter, contentCellProps, order.ShipAddress);
AddTableCell(wordWriter, contentCellProps, order.OrderDate != null ? string.Format("{0:d}", order.OrderDate) : "");
wordWriter.EndTableRow();
i++;
}
// End the table
wordWriter.EndTable();
// End the document
wordWriter.EndDocument();
wordWriter.Close();
}
#endregion
#region Private Methods
private void AddTableCell(WordDocumentWriter documentWriter, TableCellProperties cellProperties, string cellText)
{
// Start a Cell
documentWriter.StartTableCell(cellProperties);
// Start a Paragraph and add a text run to the cell
documentWriter.StartParagraph();
documentWriter.AddTextRun(cellText);
documentWriter.EndParagraph();
// End the Cell
documentWriter.EndTableCell();
}
#endregion
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace IgniteUI.SamplesBrowser.Models.Northwind
{
public class Order
{
public int OrderID { get; set; }
public string CustomerID { get; set; }
public Nullable<int> EmployeeID { get; set; }
public Nullable<System.DateTime> OrderDate { get; set; }
public Nullable<System.DateTime> RequiredDate { get; set; }
public Nullable<System.DateTime> ShippedDate { get; set; }
public Nullable<int> ShipVia { get; set; }
public Nullable<decimal> Freight { get; set; }
public string ShipName { get; set; }
public string ShipAddress { get; set; }
public string ShipCity { get; set; }
public string ShipRegion { get; set; }
public string ShipPostalCode { get; set; }
public string ShipCountry { get; set; }
public string ContactName { get; set; }
public string EmployeeName { get; set; }
public int ShipperID { get; set; }
public string ShipperName { get; set; }
public decimal TotalPrice { get; set; }
public int TotalItems { get; set; }
}
}