【问题标题】:The number of columns in PdfPTable constructor must be greater than zeroPdfPTable 构造函数中的列数必须大于零
【发布时间】:2020-01-21 23:37:07
【问题描述】:
protected void pdf(DataTable dt, string str)
        {
            Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 22, 34, 34);
            PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(Request.PhysicalApplicationPath+"sdad.pdf", FileMode.Create));
            doc.Open();
            doc.Add(new Paragraph("Table"));
            GridView dataGridview = new GridView();


            dataGridview.ShowHeaderWhenEmpty = true;
            dataGridview.AllowPaging = false;
            dataGridview.DataSource = dt;
            dataGridview.DataBind();
            PdfPTable table = new PdfPTable(dataGridview.Columns.Count);
            for (int j = 0; j < dataGridview.Columns.Count; j++)
            {
                table.AddCell(new Phrase(dataGridview.Columns[j].HeaderText));
            }
            table.HeaderRows = 1;
            for (int j = 0; j < dataGridview.Rows.Count;j++)
            {
                for (int k = 0; k < dataGridview.Columns.Count; k++)
                {
                    if (dataGridview.Rows[j].Cells[k].Text  != null)
                    {
                        table.AddCell(new Phrase(dataGridview.Rows[j].Cells[k].Text.ToString()));
                    }
                }
            }
            doc.Add(table);
            doc.Close();

        }

这是使用 Isharp 文本创建 PDF 的代码。但我收到错误 PdfPTable 构造函数中的列数必须大于零。请任何人都可以帮助解决此错误。提前致谢。

【问题讨论】:

  • dataGridView.Columns.Count的值是多少
  • 实际上它显示为零。但我可以看到包含三列的数据网格视图。
  • 你为什么不直接使用 DataTable 而不是制作一个新的网格视图控件。你怎么能看到它?据我所知,您不会将其添加到任何表单中。
  • 好的。谢谢。我会去吃饭。我在一个功能中显示网格视图,在创意 pdf 中显示另一个功能。

标签: c# gridview itextsharp


【解决方案1】:

就我而言,我有这个显然“无效”的 html:

 <table class="table-bordered" style="width: 100%; margin-top: 10px">
 </table>

即。没有行的表。

【讨论】:

  • Bingo.. 无效的 Html 格式是我的罪魁祸首
【解决方案2】:

我遇到了这个问题,我找到了解决方案,你可以添加

AutoGenerateColumns="False" ItemsSource="{Binding} 在您的 xml 中(在 DataGrid 标记中)。 那么您必须指定 dataGrid.Columns。

<DataGrid  Name="grdTransaksi" HorizontalAlignment="Left"Margin="10,94,0,0" VerticalAlignment="Top" AutoGenerateColumns="False" ItemsSource="{Binding}">
     <DataGrid.Columns>
       <DataGridTextColumn Header="Tanggal" Binding="{Binding tanggal}" />
       <DataGridTextColumn Header="Kode Akun" Binding="{Binding KodeAkun}" />
     </DataGrid.Columns>
</DataGrid>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-16
    • 2017-01-30
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2011-04-18
    • 2015-12-31
    相关资源
    最近更新 更多