2017-03-14 13 views
-1

データベースからデータを読み込み、iTextSharpを使用してテーブルを作成しています。あなたが見ることができるように、私はデータをループする「foreachの」を使用して、テーブルを移入していiTextSharpでセルの配置と背景行の色を設定する

var db = Database.Open("NewDatabase"); 
var sql = 
    @"SELECT FullName, 
       [2017-01-02], [2017-01-03], [2017-01-04], 
       ([2017-01-02] + [2017-01-03] + [2017-01-04]) as 'DatesSum', 
       [Week1] 
    FROM  [NewTable]"; 

var data = db.Query(sql); 
var columns = data.First().Columns;                   
var doc = new Document();                     
PdfWriter.GetInstance(doc, Response.OutputStream);               
doc.Open(); 
PdfPTable table = new PdfPTable(new float[] {30f, 10f, 10f, 10f, 10f, 10f}); 

foreach(var row in data)               
{ 
    foreach(var column in columns) 
    { 
     table.AddCell(new Phrase(row[column] != null ? row[column].ToString() : string.Empty)); 
    } 
} 

doc.Add(table); 
doc.Close(); 

:これは私がデータを読んでいる方法です。それが私がテーブルを埋めることを知っている唯一の方法です(私はiTextSharpをかなり新しくしています)。

私はデータをセルの中央に揃えようとしています。また、行の色(1行おき)を交互にしたい。

row[column].HorizontalAlignment = 1; 

リファレンス:https://www.mikesdotnetting.com/article/205/exporting-the-razor-webgrid-to-pdf-using-itextsharp

答えて

3

PdfPCellHorizontalAlignmentBackgroundColorプロパティを設定し、私は結果なしで、ループ内で、このようなことをしようとしています。

サンプルデータ:

static readonly int[,] data = new int[,] 
{ 
    { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } 
}; 
static readonly int rows = data.GetLength(0); 
static readonly int columns = data.GetLength(1); 

PDFを作成します。

var table = new PdfPTable(2) 
{ 
    HorizontalAlignment = Element.ALIGN_LEFT, 
    WidthPercentage = 50 
}; 
var cell = new PdfPCell() {HorizontalAlignment = Element.ALIGN_CENTER}; 
using (var stream = new MemoryStream()) 
{ 
    using (var document = new Document()) 
    { 
     PdfWriter.GetInstance(document, stream); 
     document.Open(); 

     for (int i = 0; i < rows; ++i) 
     { 
      cell.BackgroundColor = i % 2 == 0 
       ? BaseColor.LIGHT_GRAY : BaseColor.WHITE; 
      for (int j = 0; j < columns; ++j) 
      { 
       cell.Phrase = new Phrase(data[i, j].ToString()); 
       table.AddCell(cell); 
      } 
     } 
     document.Add(table); 
    } 
    File.WriteAllBytes(OUTPUT, stream.ToArray()); 
} 

出力:

enter image description here

+0

ありがとうkuujinboを。自分のケースのように、データベースクエリに答えを適用するにはどうすればよいですか?私はあなたがこの 'static readonly int rows = data.GetLength(0);'を行ったのを見ましたが、私はそれをどのように翻訳するのかわかりません(データベースから取得したときに自分のテーブルを作成しました)。あるいは、私の 'foreach'ループの中でこれを行う方法を知っているかもしれませんか? –

関連する問題