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

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

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

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

SQL Server

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

受付中

C# SQLで条件の絞り込み検索を行い、データグリットビューに反映させたいです。

ANIC
ANIC

総合スコア0

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

SQL Server

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

1回答

0評価

3クリップ

11663閲覧

投稿2016/08/19 06:00

###前提・実現したいこと

初心者です。
C#、Formアプリケーションにて
書籍管理システムを作っています。
![イメージ説明](498ebbb153f6fb0279f81ae5b48862b6.jpeg)

![イメージ説明](19c665b2e63d2c3eb456b54642e7a9b8.jpeg)
現在SQLServerから書籍データを取得してdataGridに一覧表示しているのですが、
画像にある「カテゴリ」、「著者」、「書籍名」、「並び順」の条件を絞込みしての検索ができません。

条件絞込み検索を実装したいです。
※「書籍名」はひらがな検索で実装したいです。

###発生している問題・エラーメッセージ
現在エラーは発生していないのですが、下記サイトを参考にページング処理を実装しています。

https://support\.microsoft\.com/ja-jp/kb/307710

上記のサイトの方法でページング処理を実装しますとLoad時にdataGridにSQLの内容をセットしているようなのですが、検索ボタンを押下した際にSQLの内容を取得しdataGridへ表示する方法が分からずにいます。

###該当のソースコード
現在実装しているソースコード全文になります。

using System; using System\.Collections\.Generic; using System\.ComponentModel; using System\.Data; using System\.Drawing; using System\.Linq; using System\.Text; using System\.Windows\.Forms; using System\.Data\.SqlClient; namespace 書籍管理システム { public partial class Form1 : Form { SqlDataAdapter da; DataSet ds; DataTable dtSource; int PageCount; int maxRec; int pageSize; int currentPage; int recNo; private void LoadPage\(\) { int i; int startRec; int endRec; DataTable dtTemp; // Clone the source table to create a temporary table\. dtTemp = dtSource\.Clone\(\); if \(currentPage == PageCount\) { endRec = maxRec; } else { endRec = pageSize \* currentPage; } startRec = recNo; // Copy rows from the source table to fill the temporary table\. for \(i = startRec; i < endRec; i\+\+\) { dtTemp\.ImportRow\(dtSource\.Rows\[i\]\); recNo \+= 1; } dataGrid1\.DataSource = dtTemp; DisplayPageInfo\(\); } private void DisplayPageInfo\(\) { txtDisplayPageNo\.Text = currentPage\.ToString\(\) \+ "/ " \+ PageCount\.ToString\(\); } private bool CheckFillButton\(\) { // Check if the user clicks the "Fill Grid" button\. if \(pageSize == 0\) { MessageBox\.Show\("Set the Page Size, and then click the Fill Grid button!"\); return false; } else { return true; } } public Form1\(\) { InitializeComponent\(\); // コンボボックスの初期値を設定 comboBox2\.SelectedIndex = 0; // SQLのインスタンス化 SqlConnection conn = new SqlConnection\(\); SqlCommand command = new SqlCommand\(\); // 接続文字列の指定 conn\.ConnectionString = @"Data Source=versapro\\sqlexpress;Initial Catalog=書籍管理システム;Integrated Security=True"; // 接続 conn\.Open\(\); // SQL SELECT文の設定 command\.CommandText = "SELECT CATEGORY_NAME FROM MST_CATEGORY"; command\.Connection = conn; SqlDataReader reader = command\.ExecuteReader\(\); // カテゴリコンボボックスに1行ずつ読み取り while \(reader\.Read\(\)\) { string name = \(string\)reader\.GetValue\(0\); comboBox1\.Items\.Add\(name\); } // 接続を閉じる conn\.Close\(\); } private void Form1_Load\(object sender, EventArgs e\) { // データグリットのカラムをセンター表示 dataGrid1\.ColumnHeadersDefaultCellStyle\.Alignment = DataGridViewContentAlignment\.MiddleCenter; // データグリットの列幅をコントロールの表示領域の幅に合わせて表示 dataGrid1\.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode\.Fill; // Open Connection\. SqlConnection conn = new SqlConnection\(@"Data Source=versapro\\sqlexpress;Initial Catalog=書籍管理システム;Integrated Security=True;"\); // Set the DataAdapter's query\. da = new SqlDataAdapter\("SELECT MST_CATEGORY\.CATEGORY_NAME as カテゴリ,MST_BOOK\.BOOK_AUTHOR as 著者,BOOK_NAME as 書籍名,BOOK_NAME_KANA as 書籍名かな FROM MST_BOOK JOIN MST_CATEGORY ON MST_CATEGORY\.CATEGORY_CD=MST_BOOK\.CATEGORY_CD", conn\); ds = new DataSet\(\); // Fill the DataSet\. da\.Fill\(ds, "MST_BOOK"\); // Set the source table\. dtSource = ds\.Tables\["MST_BOOK"\]; } private void btnFillGrid_Click_1\(object sender, EventArgs e\) { // Set the start and max records\. pageSize = Convert\.ToInt32\(txtPageSize\.Text\); maxRec = dtSource\.Rows\.Count; PageCount = maxRec / pageSize; // Adjust the page number if the last page contains a partial page\. if \(\(maxRec % pageSize\) > 0\) { PageCount \+= 1; } // Initial seeings currentPage = 1; recNo = 0; // Display the content of the current page\. LoadPage\(\); int cnt = dataGrid1\.Rows\.Count; gaito\.Text = "該当件数" \+ " " \+ cnt\.ToString\(\) \+ "件"; // Last,Nextボタンを有効にする btnLastPage\.Enabled = true; btnNextPage\.Enabled = true; // First,Previousボタンを無効にする btnFirstPage\.Enabled = false; btnPreviousPage\.Enabled = false; }

###試したこと
知り合いはASP.NETで下記コードを実装して
完全一致の絞込みはできたとのことでした。

試してみましたがLoadイベントに書き込むと
「スカラ変数 "@CATEGORY_NAME" を宣言してください。」
とエラーが発生します。

どのように活用していいかのかも分からずにいます。

String categoryname = DropDownList1.SelectedValue;
String bookauthor = TextBox1.Text;
String bookname = TextBox2.Text;
String orderobj = DropDownList2.SelectedValue;

// 接続文字列の取得 var connectionString = ConfigurationManager\.ConnectionStrings\["BookManagementConnectionString1"\]\.ConnectionString; using \(SqlConnection conn = new SqlConnection\(connectionString\)\) using \(var command = conn\.CreateCommand\(\)\) { // データベースの接続開始 conn\.Open\(\); // SQLの準備 command\.CommandText = "SELECT CATEGORY_NAME, BOOK_AUTHOR, BOOK_NAME, BOOK_NAME_KANA FROM BOOK_SEARCH WHERE CATEGORY_NAME = @CATEGORY_NAME AND BOOK_AUTHOR = @BOOK_AUTHOR AND BOOK_NAME = @BOOK_NAME"; command\.CommandText \+= " order by BOOK_NAME asc"; command\.Parameters\.Add\(new SqlParameter\("CATEGORY_NAME", categoryname\)\); command\.Parameters\.Add\(new SqlParameter\("BOOK_AUTHOR", bookauthor\)\); command\.Parameters\.Add\(new SqlParameter\("BOOK_NAME", bookname\)\);

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual C# 2008
Microsoft SQLserver 2008

拙い説明で申し訳ございません。
お忙しい中お手数をおかけしますが何卒よろしくお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

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

SQL Server

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