【问题标题】:C# /.net /DataGrid / iTextSharp -- I have a bit of a long one, ill explainC# /.net /DataGrid / iTextSharp -- 我有一个有点长的,不好解释
【发布时间】:2020-01-22 09:10:05
【问题描述】:

您好,感谢您抽出宝贵时间阅读这里,这是我的问题,我正在制作一个 Winforms 应用程序,它将与发票有关的所有相关数据提取到临时数据库 C#,然后毫无问题地将其拉入 Datagrid,我可以将Datagrid调用到我的pdf中也没有问题,我有一个问题是,对于数据网格中的每一行,我需要动态地将一个单元格添加到pdf并将唯一的项目信息填充到那些单元格中同一张发票,举个更清楚的例子

tranlinenum 1 是项目 A tranlinenum 2 是项目 B 和 tranlinenum 3 是 C 项

我可以让 pdf 为每个项目动态创建每个单元格/行,但在这些单元格和行中显示的信息不是针对该项目的,它们是针对第一个被拉出的项目

===========这是我的代码的开始===============

string lineNumberInput = dt.Rows[0][1].ToString();
string itemCodeInput = dt.Rows[0][12].ToString();
string itemNameInput = dt.Rows[0][13].ToString();
string QtyInput = dt.Rows[0][14].ToString();
string UnitPriceInput = dt.Rows[0][15].ToString();
//string Discount = dt.Rows[0][""].ToString();
string lineTotalInput = dt.Rows[0][16].ToString();
string wasReturnedInput = dt.Rows[0][17].ToString();


foreach (DataRow dataRow in dt.Rows)
{

var Cell_LineNumberList = new PdfPCell(new Phrase(lineNumberInput, 
tablefont));
var Cell_ItemCodelist = new PdfPCell(new Phrase(itemCodeInput, tablefont));
var Cell_ItemNamelist = new PdfPCell(new Phrase(itemNameInput, tablefont));
var Cell_Qtylist = new PdfPCell(new Phrase(QtyInput, tablefont));
var Cell_UnitPricelist = new PdfPCell(new Phrase(UnitPriceInput, tablefont));
var Cell_Discountlist = new PdfPCell(new Phrase("None", tablefont));
var Cell_LineTotallist = new PdfPCell(new Phrase(lineTotalInput, tablefont));
var Cell_WasReturnedlist = new PdfPCell(new Phrase(wasReturnedInput, 
tablefont));

t.AddCell(Cell_LineNumberList);
t.AddCell(Cell_ItemCodelist);
t.AddCell(Cell_ItemNamelist);
t.AddCell(Cell_Qtylist);
t.AddCell(Cell_UnitPricelist);
t.AddCell(Cell_Discountlist);
t.AddCell(Cell_LineTotallist);
t.AddCell(Cell_WasReturnedlist);

}

我还附上了发票的屏幕截图以及相关部件的外观

https://prnt.sc/qr5lcy

【问题讨论】:

    标签: c# sql .net


    【解决方案1】:

    您只获得一次查询返回的值,对于 row[0]

    只需将代码移到foreach中foreach之上,访问每个dataRow,即

    string lineNumberInput = dataRow[1].ToString();
    

    而不是

    string lineNumberInput = dt.Rows[0][1].ToString();
    

    【讨论】:

    • 你是GOAT,谢谢你的帮助,完全按要求解决了,谢谢
    【解决方案2】:

    您应该在每次循环迭代中初始化您的变量,例如 lineNumberInput。试试这个:

    foreach (DataRow dataRow in dt.Rows)
    {
      string lineNumberInput = dataRow[1].ToString();
      string itemCodeInput = dataRow[12].ToString();
      string itemNameInput = dataRow[13].ToString();
      string QtyInput = dataRow[14].ToString();
      string UnitPriceInput = dataRow[15].ToString();
      //string Discount = dataRow[""].ToString();
      string lineTotalInput = dataRow[16].ToString();
      string wasReturnedInput = dataRow[17].ToString();
    
      var Cell_LineNumberList = new PdfPCell(new Phrase(lineNumberInput, 
    tablefont));
      var Cell_ItemCodelist = new PdfPCell(new Phrase(itemCodeInput, tablefont));
      var Cell_ItemNamelist = new PdfPCell(new Phrase(itemNameInput, tablefont));
      var Cell_Qtylist = new PdfPCell(new Phrase(QtyInput, tablefont));
      var Cell_UnitPricelist = new PdfPCell(new Phrase(UnitPriceInput, tablefont));
      var Cell_Discountlist = new PdfPCell(new Phrase("None", tablefont));
      var Cell_LineTotallist = new PdfPCell(new Phrase(lineTotalInput, tablefont));
      var Cell_WasReturnedlist = new PdfPCell(new Phrase(wasReturnedInput, 
    tablefont));
    
      t.AddCell(Cell_LineNumberList);
      t.AddCell(Cell_ItemCodelist);
      t.AddCell(Cell_ItemNamelist);
      t.AddCell(Cell_Qtylist);
      t.AddCell(Cell_UnitPricelist);
      t.AddCell(Cell_Discountlist);
      t.AddCell(Cell_LineTotallist);
      t.AddCell(Cell_WasReturnedlist);
    
    }
    

    【讨论】:

    • 也感谢您的帮助,将两者都标记为答案,因为两者都是正确的解决方案
    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多