Goran Bibic Ответов: 2

То, что я отсутствует? Количество столбцов в конструкторе pdfptable должно быть больше нуля


The number of columns in PdfPTable constructor must be greater than zero


Что я уже пробовал:

<pre>

private static DataTable dt = new DataTable();
/////////////////////////////////////////////////////////


private static void slanjeizvestaja()
        {
            String cs = "Data Source=.\\SQLEXPRESS;Initial Catalog=bss_prijava_radnika;Integrated Security=True";
            using (SqlConnection openCon = new SqlConnection(cs))

            {

                string pronadji = "SELECT p.brojprijavnice2 AS Redni_broj, p.radnik AS Radnik, p.vrijemeprijave AS Vrijeme_Prijave, p.vrijemeodjave AS Vrijeme_odjave"
                                 + " FROM dbo.prijava_radnika p WHERE p.status = 'odjavljen'";



                openCon.Open();
                using (SqlDataAdapter querySaveStaff = new SqlDataAdapter(pronadji, cs))

                {
                    DataTable dt = new DataTable();
                    querySaveStaff.Fill(dt);
                }
                openCon.Close();
            }
        }

        private static void sendEmail()
        {


            PdfPTable pdfTable = new PdfPTable(dt.Columns.Count);
            pdfTable.DefaultCell.Padding = 3;
            pdfTable.WidthPercentage = 100;
            pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
            pdfTable.DefaultCell.BorderWidth = 1;
            BaseFont bfCalibri = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            iTextSharp.text.Font calibri = new iTextSharp.text.Font(bfCalibri, 12);

2 Ответов

Рейтинг:
12

OriginalGriff

Ваш slanjeizvestaja объявляет новую переменную с именем dt который маскирует частную статическую версию, которая sendEmail использует для своих данных:

using (SqlDataAdapter querySaveStaff = new SqlDataAdapter(pronadji, cs))

{
    DataTable dt = new DataTable();
    querySaveStaff.Fill(dt);
Из-за этого ваши данные выбрасываются в конце метода.
Попробуй:
using (SqlDataAdapter querySaveStaff = new SqlDataAdapter(pronadji, cs))

{
    dt = new DataTable();
    querySaveStaff.Fill(dt);
И посмотрим, исправит ли это ситуацию.


Goran Bibic

Спасибо

OriginalGriff

Всегда пожалуйста!

Рейтинг:
11

F-ES Sitecore

"ДТ" здесь

{
    DataTable dt = new DataTable();
    querySaveStaff.Fill(dt);
}


Существует только в этом блоке кода (между { } ), поэтому вы создаете dt, заполняете его, а затем выбрасываете. Итак этот код здесь;

PdfPTable pdfTable = new PdfPTable(dt.Columns.Count);


использует ли он "dt" , определенный здесь

private static DataTable dt = new DataTable();


Этот dt остается нетронутым, поэтому имеет нулевые столбцы и никаких данных. Измените код в slanjeizvestaja, чтобы использовать dt, определенный вверху, а не создавать второй "dt"

{
    dt = new DataTable();
    querySaveStaff.Fill(dt);
}


Goran Bibic

Спасибо