iTextSharp.text.pdf.draw.LineSeparator line1 = new iTextSharp.text.pdf.draw.LineSeparator(0f, 100f, BaseColor.BLACK, Element.ALIGN_LEFT, 1); document.Add(new Chunk(line1));
Wednesday, 6 August 2014
Adding a Horizontal Line to PDF similar to hr tag
Friday, 25 July 2014
Restrict a Method To Members of Certain Roles
Simple Example
// Only Let People who are in the Administrator or Managers Roles Use this method [Authorize(Roles = "Administrator,Managers")] public ActionResult Delete(int id = 0) { Report Report = db.Report.Find(id); if (Report == null) { return HttpNotFound(); } return View(Report ); }
MVC 4 - Creating PDF Files with iTextSharp
I've found in my latest job that just about every project requires spitting out PDFs in various flavours so here's a simple example:
// First things first, make sure you've got the package installed // Package Manager PM> Install-Package iTextSharp // In your Controller make sure you reference iTextSharp.text and iTextSharp.pdf using iTextSharp.text; using iTextSharp.text.pdf; // Outputs a Simple PDF with the Name and Description of a given Product public FileStreamResult ProductInfoPDF(int id) { Product = context.Products.Find(id); // if we don't find anything then just quit if (Product == null) { return null; } MemoryStream workStream = new MemoryStream(); Document document = new Document(); // Landscape Layout document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); PdfWriter.GetInstance(document, workStream).CloseStream = false; document.Open(); // Heading Paragraph pHeading = new Paragraph("Product Information"); pHeading.Alignment = Element.ALIGN_CENTER; pHeading.Font.SetStyle(Font.BOLD); pHeading.Font.Size = 12; pHeading.SpacingAfter = 18f; document.Add(new Paragraph(pHeading)); Paragraph p = new Paragraph("Some background about this product."); p.Font.SetStyle(Font.BOLD); p.Font.Size = 8; document.Add(p); // Product Name Paragraph pProductName = new Paragraph("Product Name: " + Product.Name); pProductName.Font.SetStyle(Font.BOLD); pProductName.Font.Size = 8; document.Add(pProductName); // Description document.Add(new Paragraph("\n")); document.Add(new Paragraph("\n")); Paragraph pDescription = new Paragraph("Description"); pEquip.Font.SetStyle(Font.BOLD); pEquip.Font.Size = 8; document.Add(pDescription ); document.Close(); byte[] byteInfo = workStream.ToArray(); workStream.Write(byteInfo, 0, byteInfo.Length); workStream.Position = 0; return new FileStreamResult(workStream, "application/pdf") { FileDownloadName = "Product_" + Product.Id.ToString() + ".pdf" }; } // Add a link in your View @Html.ActionLink("Print", "ProductInfoPDF","Products" ,new { id = Model.Id }, new { @class = "printLink"})
LINQ Kung Fu - Tips from t'coalface of t'Interwebs
Select Statements
Get List based on Category
// Get Products in a certain category // same as SQL: select * from Products where CategoryId = CategoryId int CategoryId = 1; List<Product> Products = db.Products.Where(x => x.CategoryId == CategoryId).ToList();
Select a Single Value with Where Clause
// get the Price of the latest product entered with the Name: "Box of Blue Sparks" // SQL Equivalent: select TOP 1 Price from Products where Name = 'Box of Blue // Sparks' ORDER BY CreatedDate DESC string pName = "Box of Blue Sparks"; var available = db.Products.Where(x => x.Name == pName).OrderByDescending(x => x.CreatedDate).Select(x => x.Price).FirstOrDefault();
Select DISTINCT
// Get a list of Distinct Product Colours // SQL Equivalent: SELECT DISTINCT(Colour) FROM Products WHERE Price is more then £10 List<string> ProductNames = db.Products.Where(x => x.Price > 10).Select(x => x.Colour).Distinct().ToList(); // Note to the Colonials, that is the correct way to spell COLOUR!
Select a Single Record
// Get the first product priced over £100 // SQL Equivalant: SELECT TOP 1 * FROM Products WHERE Price > 100 Product p = db.Products.Where(x => x.Price > 100).FirstOrDefault();I'll add to this as I get further along the learning curve.
Update 08-01-2015
Get all Model Validation Errors via LINQ
This is very useful when debugging MVC Controller Methods.
var allErrors = ModelState.Values.SelectMany(v => v.Errors);
Tuesday, 22 July 2014
MVC 4 Display Correct Date Format in Edit Mode
This works:
@Html.TextBox("DateOrdered", string.Format("{0:d}", Model.DateOrdered))
Monday, 21 July 2014
MVC 4, EF5 Code First - Forcing a Decimal to x Number of Places
Stick this in your DB Context if you need to have EF recongise more than two decimal places.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// We have a Decimal Field in Our SQL Table decimal(18, 4)
// By default only the first two digits after the decimal will be recognised if this property is set to type decimal
// we need to override this behaviour and here's how
modelBuilder.Entity<MyObjec t>().Property(f => f.totalWeightMg).HasPrecision(18,4);
base.OnModelCreating(modelBuilder);
}
Wednesday, 9 July 2014
Return Yes, No from Boolean instead of True, False
I recently needed to output Boolean values into an iTextSharp PDF document having them represented as Yes or No rather than True or False
Cue MSDN. This article Boolean Structure explains how to do this.
Here's a quick example:
bool JobDone = true; string strJobDone = JobDone ? "Yes" : "No"; // Returns "Yes"
Wednesday, 4 June 2014
MVC4 Entity Framework and Decimal Precision
This just caught me out today so hopefully it will help someone else.
Stack Overflow answer here http://stackoverflow.com/questions/3504660/decimal-precision-and-scale-in-ef-code-first
If you have a database field with the spec decimal(18,5) the Entity Framework will still round the number to 2 decimal places by default, so if you enter a number e.g. 15.42700 it will be saved to your database as 15.42000, not very helpful eh. Anyway to fix it you need to override OnModelCreating in your DBContext Class
public class EFDbContext : DbContext { protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) { modelBuilder.Entity().Property(object => object.property).HasPrecision(12, 10); base.OnModelCreating(modelBuilder); } }
Friday, 11 April 2014
Getting to Grips with Sharepoint Foundation 2013 REST API
I'm finding myself constantly struggling against the OOB (Out Of Box) features of Sharepoint Foundation 2013 and often need to find ways to interact with Lists in ways that are just not available. Enter the REST API. If, like me, you need to get to grips with using the Sharepoint REST API then I recommend the article SharePoint: Adventures with the REST API Part 1 which is by far the best guide I have found on them t'interwebs.
Autocomplete Lookup Field in Sharepoint Foundation 2013
Recently I've been working on a project where there are several related Lists, in this particular instance a list of Appointments and Patients. So the Appointments List has a Lookup field Patient. By default this gives you a select or drop down list, not ideal if you end up with several items on the list.
I eventually stumbled across SharePoint 2013 Autocomplete Lookup Field. Pretty straightforward to install provided you have server access and works like a charm. Highly recommeded.