質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

解決済

テーブルの内容を1ページ50行で200ページ印刷したい

hinatti
hinatti

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

1回答

0評価

0クリップ

2712閲覧

投稿2017/09/13 07:38

編集2022/01/12 10:58

###前提・実現したいこと
foreachの読み取り位置を記憶して50行ずつ印刷したい

###発生している問題・エラーメッセージ

同じ50行が200ページ印刷されてしまう

###該当のソースコード

C#

/// <summary> /// 降順印刷ボタンのイベントハンドラ /// product_tableを降順に並べ替えて印刷 /// </summary> /// <param name="sender">使用しない</param> /// <param name="e">使用しない</param> private void buttonDescendingOrderPrint_Click(object sender, EventArgs e) { string sql = @" SELECT * FROM product_table ORDER BY product_id DESC;"; using (connection = new SqlConnection(Properties.Settings.Default.ConnectionString)) { try { connection.Open(); } catch (Exception ex) { MessageBox.Show("データベースを開くのに失敗しました。", "error", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Diagnostics.Debug.WriteLine(ex.ToString()); } List<ProductData> productList = new List<ProductData>(); SqlCommand command = new SqlCommand(sql, connection); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read() == true) { ProductData productData = new ProductData(); productData.ProductId = reader["product_id"].ToString(); productData.BasicOrderLot = reader["basic_order_lot"].ToString(); productData.ProductCode = reader["product_code"].ToString(); productData.ChassisNumber = reader["chassis_number"].ToString(); productData.AssembledYmd = reader["assembled_ymd"].ToString(); productData.AssembledHms = reader["assembled_hms"].ToString(); productData.StructNumber = reader["struct_number"].ToString(); productData.YyyyMm = reader["yyyymm"].ToString(); productList.Add(productData); } reader.Close(); } productDataBindingSource.DataSource = productList; PrintOut(); } } /// <summary> /// PrintOutメソッド /// 印刷ダイアログを表示して印刷する /// </summary> private void PrintOut() { using (PrintDocument document = new PrintDocument()) { document.PrintPage += new PrintPageEventHandler(PrintPage); PrintDialog log = new PrintDialog(); if (log.ShowDialog() == DialogResult.Cancel) { return; } document.Print(); } } /// <summary> /// 1ページ印刷するイベントハンドラ /// 1ページ分の印刷設定 /// </summary> /// <param name="sender">使用しない</param> /// <param name="e">使用する</param> private void PrintPage(object sender, PrintPageEventArgs e) { int line = 0; int x, y = 20; e.HasMorePages = true; Font font = new Font("MS ゴシック", 12); foreach (ProductData data in productList) { x = 30; e.Graphics.DrawString(data.ProductId, font, Brushes.Black, x, y); x = x + 80; e.Graphics.DrawString(data.BasicOrderLot, font, Brushes.Black, x, y); x = x + 90; e.Graphics.DrawString(data.ProductCode, font, Brushes.Black, x, y); x = x + 80; e.Graphics.DrawString(data.ChassisNumber, font, Brushes.Black, x, y); x = x + 60; e.Graphics.DrawString(data.AssembledYmd, font, Brushes.Black, x, y); x = x + 150; e.Graphics.DrawString(data.AssembledHms, font, Brushes.Black, x, y); x = x + 100; e.Graphics.DrawString(data.StructNumber, font, Brushes.Black, x, y); x = x + 100; e.Graphics.DrawString(data.YyyyMm, font, Brushes.Black, x, y); y = y + 20; line++; if (line == 50) { break; } } e.Graphics.DrawString(String.Format("{0}ページ", page), new Font("MS ゴシック", 12) , Brushes.Black, 365, 1110); page++; if (MAX_PAGE <= page) { e.HasMorePages = false; connection.Close(); } } } }

###補足情報(言語/FW/ツール等のバージョンなど)
5852232 2A11B5632ZABFA157220000825 18:08:57 8D11080200008
このようなデータが1万行あります。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです