Member 14087194 Ответов: 2

Как распечатать все элементы listview?


Я думаю, что это должно быть просто, но я просто не знаю, с чего начать. У меня есть listview, полный элементов из базы данных SQLite, и я хочу отправить его на принтер или сохранить в формате PDF.

Любая помощь будет оценена по достоинству.

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

Вот источник элемента listview:
private void fillRcvStats()
        {
            var RcvTotals = new ObservableCollection<Rcv>();
            var db = new SqliteConnection("Filename=VollyStats.db");
            db.Open();
            string str = "SELECT Players.FirstName, COUNT(distinct SetNum), COUNT(distinct MID)," +
                " SUM(CASE WHEN TouchQ = '1' THEN 1 ELSE 0 END), SUM(CASE WHEN TouchQ = '2' THEN 1 ELSE 0 END)," +
                " SUM(CASE WHEN TouchQ = 'Error' THEN 1 ELSE 0 END)" +
                " FROM Stats  inner join Players on Stats.PlyrID = Players.PlyrID " + DMID + " TouchT = 'Receive' GROUP BY Players.FirstName";
            SqliteCommand cmd = new SqliteCommand(str, db);

            SqliteDataReader reader = cmd.ExecuteReader();
            RcvTotals.Clear();
            while (reader.Read())
            {
                string RPLYR = reader.GetValue(0).ToString();
                int RSP = int.Parse(reader.GetValue(1).ToString());
                int RMP = int.Parse(reader.GetValue(2).ToString());
                int R1 = int.Parse(reader.GetValue(3).ToString());
                int R2 = int.Parse(reader.GetValue(4).ToString());
                int RERR = int.Parse(reader.GetValue(5).ToString());
                int TR = (R1 + R2);
                int R_S = (R1 + R2) / RSP;
                int R_M = (R1 + R2) / RMP;

                RcvTotals.Add(new Rcv(RPLYR, RSP, R1, R2, TR, RERR, R_S, R_M));
            }
            reader.Close();
            db.Close();
            RCVLV.ItemsSource = RcvTotals;
        }

Maciej Los

В чем твоя проблема?

2 Ответов

Рейтинг:
2

Wendelius

Прежде всего, не объединяйте значения в строку SQL. Это оставляет вас широко открытыми для SQL-инъекций. Вместо этого используйте SqliteParameter.

Что касается создания PDF-файла, возможно, вы могли бы использовать GitHub - itext/itextsharp: .NET-порт библиотеки iText[^]


Member 14087194

Спасибо вам за информацию о SQL-инъекции, я узнал, что это значит, и теперь меняю много кода.

До сих пор не разобрались с печатью....

Wendelius

Можно ли просто сохранить данные в формате PDF, а затем распечатать его?

Альтернативой itextsharp может быть pdfsharp. Взгляните на это Главная страница фонда PDFsharp и MigraDoc - PDFsharp & MigraDoc[^] инструкции по печати см. В разделе Генерация и печать PDF-файлов в .NET[^]

Рейтинг:
1

e.leaf

string _fileName = "";

_fileName = GetSaveDialogFileName(defFileName, ".pdf", "Pdf documents (.pdf)|*.pdf");
                   if (_fileName == "")
                       return;

public static string GetSaveDialogFileName(string defaultFileName, string defaultExt, string filter)
       {
           string saveFileName = "";
           Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
           dlg.FileName = defaultFileName; // Default file name
           dlg.DefaultExt = defaultExt;
           dlg.Filter = filter;
           if (dlg.ShowDialog() == true)
               saveFileName = dlg.FileName;

           return saveFileName;
       }