質問するログイン新規登録

回答編集履歴

3

追記

2018/11/13 05:33

投稿

退会済みユーザー
answer CHANGED
@@ -10,4 +10,68 @@
10
10
 
11
11
  であれば、DB に検索用のクエリを投げるのではなくて、全レコードはすでに DataSet / DataTable に取得済みなので、それをフィルタリングして DataGridView に表示した方がよさそうです。
12
12
 
13
- 詳しい方法が不明でしたら聞いてください。DB が何かの情報もよろしく。
13
+ 詳しい方法が不明でしたら聞いてください。DB が何かの情報もよろしく。
14
+
15
+ **【追記2】**
16
+
17
+ 上の追記で、
18
+
19
+ > DB に検索用のクエリを投げるのではなくて、全レコードはすでに DataSet / DataTable に取得済みなので、それをフィルタリングして DataGridView に表示した方がよさそうです。
20
+
21
+ と書きましたが、そのコード例を書いておきます。
22
+
23
+ 使った DB は SQL Server の Northwind サンプルデータベースの Products テーブルです。button1_Click メソッドで DataTable.DefaultView.RowFilter を使ってフィルタリングしているところに注目してください。
24
+
25
+ ```
26
+ using System;
27
+ using System.Collections.Generic;
28
+ using System.ComponentModel;
29
+ using System.Data;
30
+ using System.Drawing;
31
+ using System.Linq;
32
+ using System.Text;
33
+ using System.Threading.Tasks;
34
+ using System.Windows.Forms;
35
+
36
+ namespace WindowsFormsApplication1
37
+ {
38
+ public partial class Form3 : Form
39
+ {
40
+ public Form3()
41
+ {
42
+ InitializeComponent();
43
+ }
44
+
45
+ private void productsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
46
+ {
47
+ this.Validate();
48
+ this.productsBindingSource.EndEdit();
49
+ this.tableAdapterManager.UpdateAll(this.northwindDataSet);
50
+ }
51
+
52
+ private void Form3_Load(object sender, EventArgs e)
53
+ {
54
+ this.productsTableAdapter.Fill(this.northwindDataSet.Products);
55
+ }
56
+
57
+ private void button1_Click(object sender, EventArgs e)
58
+ {
59
+ if (!String.IsNullOrEmpty(this.textBox1.Text))
60
+ {
61
+ NorthwindDataSet.ProductsDataTable table = this.northwindDataSet.Products;
62
+ table.DefaultView.RowFilter = "ProductName LIKE '%" + this.textBox1.Text + "%'";
63
+ this.productsBindingSource.DataSource = this.northwindDataSet.Products;
64
+ }
65
+ else
66
+ {
67
+ NorthwindDataSet.ProductsDataTable table = this.northwindDataSet.Products;
68
+ table.DefaultView.RowFilter = "";
69
+ }
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ TextBox に "cha" と入力して Search ボタンをクリックし、ProductName LIKE '%cha%' で検索した結果が下の画像です。
76
+
77
+ ![イメージ説明](633cca31f48ebad83834f4a03c2b0cae.jpeg)

2

追記&訂正

2018/11/13 05:33

投稿

退会済みユーザー
answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **【追記】**
6
6
 
7
- 補足情報を見ると、Visual Studio のーターソース構成ウィザードを使って型付 DataSet / DataTable + TableAdapter を生成して使っていて、すでに DataGridView に全レコードの一覧を表示し、それを編集して結果を DB に反映するところまではできているようですね。
7
+ 補足情報を見ると、Visual Studio のーターソース構成ウィザードを使って型付 DataSet / DataTable + TableAdapter を生成して使っていて、すでに DataGridView に全レコードの一覧を表示し、それを編集して結果を DB に反映するところまではできているようですね。
8
8
 
9
9
  さらに、それに TextBox と Button を追加して検索機能を持たせようとしているのですか?
10
10
 

1

追記

2018/11/13 01:51

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,13 @@
1
1
  C# ということですから、ADO.NET を使うのですよね? であれば、クエリをパラメータ化して、TextBox.Text の値をパラメータに代入するようにしてください。
2
2
 
3
- やり方は「パラメータ化クエリ」をキーワードにググればわかると思いますが、不明な点があれば聞いてください。その際は、DB が何か(SQL Server? Access? MySQL? その他?)を書いてください。
3
+ やり方は「パラメータ化クエリ」をキーワードにググればわかると思いますが、不明な点があれば聞いてください。その際は、DB が何か(SQL Server? Access? MySQL? その他?)を書いてください。
4
+
5
+ **【追記】**
6
+
7
+ 補足情報を見ると、Visual Studio のセーターソース構成ウィザードを使って型付 DataSet / DataTable + TableAdapter を生成して使っていて、すでに DataGridView に全レコードの一覧を表示し、それを編集して結果を DB に反映するところまではできているようですね。
8
+
9
+ さらに、それに TextBox と Button を追加して検索機能を持たせようとしているのですか?
10
+
11
+ であれば、DB に検索用のクエリを投げるのではなくて、全レコードはすでに DataSet / DataTable に取得済みなので、それをフィルタリングして DataGridView に表示した方がよさそうです。
12
+
13
+ 詳しい方法が不明でしたら聞いてください。DB が何かの情報もよろしく。