C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: tableBindingSourceの検索方法


(過去ログ 118 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■69476 / inTopicNo.1)  tableBindingSourceの検索方法
  
□投稿者/ ブルー (1回)-(2013/12/29(Sun) 12:20:40)

分類:[.NET 全般] 

VS2010を使用。GUIを使用し、DataSetからテーブルのフィールドをFormにドラッグ&ドロップしたらコンポーネントが自動追加されました。

行の移動から保存まで、何から何まで、コードを書かずにできたのは感動しましたが、検索機能を追加しようと思っています。

検索入力テキストボックスに文字列を入れ、検索buttonをクリックすると、検索にヒットした行が抽出されるといった事をしたいと思っています。

下記URLのような事をしたいと思っています。
http://uploda.cc/img/img52bf942ca6d87.jpg

しかし、何から調べればいいのかわからず右往左往しています。データセットの検索を行うには、どのようなメソッドを使用すればよいでしょうか?

よろしくお願いいたします。
引用返信 編集キー/
■69478 / inTopicNo.2)  Re[1]: tableBindingSourceの検索方法
□投稿者/ WebSurfer (146回)-(2013/12/29(Sun) 13:04:28)
No69476 (ブルー さん) に返信

> 検索入力テキストボックスに文字列を入れ、検索buttonをクリックすると、検索にヒットした行が抽出されるといった事をしたいと思っています。
>
> 下記URLのような事をしたいと思っています。
> http://uploda.cc/img/img52bf942ca6d87.jpg
>
> しかし、何から調べればいいのかわからず右往左往しています。データセットの検索を行うには、どのようなメソッドを使用すればよいでしょうか?

DataTable.Select メソッドが使えると思います。

DataTable.Select メソッド (String)
http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx
  

注:testDataSet を作成した後、誰かがデータを更新する可能性があって、
  [検索]ボタンクリックのタイミングで再度 DB に SELECT クエリを投げ
  て最新データを取得という場合は話が別です。

引用返信 編集キー/
■69487 / inTopicNo.3)  Re[2]: tableBindingSourceの検索方法
□投稿者/ ブルー (2回)-(2013/12/30(Mon) 17:47:13)
WebSurfer さん

ご回答ありがとうございました。
DataTable.Select メソッドで無事に解決しました。

下記のコードで解決できました。

//------------------------------------------------------------------------------
string strSearch = txtSearch.Text;
DataRow[] foundRows;

foundRows = DataSet.DataTable.Select("F1 = " + "'" + strSearch + "'");
DataTableBindingSource.DataSource = foundRows;
//------------------------------------------------------------------------------

お手数ですが、もう一点お教え頂けませんでしょうか?

上記のコードにてフィールドを絞り込むことができました。
絞り込んだ後に、検索テキストボックスを空にし、再度検索ボタンをクリックすると、条件をクリアして、全件表示にしたいと思います。

そこで、テキストボックスが空の場合は下記のようなコードを書いたのですが、解決できませんでした。

//------------------------------------------------------------------------------
this.TableAdapter.Fill(this.DataSet.DataTable);
//------------------------------------------------------------------------------

どのようなコードを書けば解決できますでしょうか?
何度も何度も申し訳ありません。宜しくお願い致します。



No69478 (WebSurfer さん) に返信
> ■No69476 (ブルー さん) に返信
>
>>検索入力テキストボックスに文字列を入れ、検索buttonをクリックすると、検索にヒットした行が抽出されるといった事をしたいと思っています。
>>
>>下記URLのような事をしたいと思っています。
>>http://uploda.cc/img/img52bf942ca6d87.jpg
>>
>>しかし、何から調べればいいのかわからず右往左往しています。データセットの検索を行うには、どのようなメソッドを使用すればよいでしょうか?
>
> DataTable.Select メソッドが使えると思います。
>
> DataTable.Select メソッド (String)
> http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx
>   
>
> 注:testDataSet を作成した後、誰かがデータを更新する可能性があって、
>   [検索]ボタンクリックのタイミングで再度 DB に SELECT クエリを投げ
>   て最新データを取得という場合は話が別です。
>
引用返信 編集キー/
■69488 / inTopicNo.4)  Re[3]: tableBindingSourceの検索方法
□投稿者/ WebSurfer (148回)-(2013/12/30(Mon) 18:43:49)
No69487 (ブルー さん) に返信
検索テキストボックスを空にし、再度検索ボタンをクリックすると、条件をクリアして、全件表示にしたいと思います。
>
> そこで、テキストボックスが空の場合は下記のようなコードを書いたのですが、解決できませんでした。
>
> //------------------------------------------------------------------------------
> this.TableAdapter.Fill(this.DataSet.DataTable);
> //------------------------------------------------------------------------------

「解決できませんでした」では不十分な情報だとは思いませんか?

コードをアップされてますが、そのような断片的なコードで、自分のようなエスパーじゃない
回答者に何が問題か分かるとは期待しないでください。

掲示板の反対側にいて、掲示板に書いてあること以外は知り得ない回答者に、どのような情報
を提供すれば質問者さんの状況を的確に把握できて、タイムリーに的を得た回答が得られるか、
よく考えて質問を書いていただければと思います。

引用返信 編集キー/
■69491 / inTopicNo.5)  Re[4]: tableBindingSourceの検索方法
□投稿者/ ブルー (3回)-(2013/12/30(Mon) 23:23:42)
WebSurfer さん

わかりにくい質問の仕方をしてしまい申し訳ありませんでした。
質問を考えなおしました。

下記のURLのような事をおこないたいと思っています。
http://uploda.cc/img/img52c17fe2d702d.jpg

リンク先の検索抽出ボタンをクリックすると下記のコードが走ります。

//==========================================================================
private void button1_Click(object sender, EventArgs e)
{
DataRow[] foundRows;
foundRows = this.testDataSet.table1.Select("f1 = '" + textBox1.Text + "'");
table1BindingSource.DataSource = foundRows;
}
//===========================================================================

このコードにより、DataTableのデータを条件により抽出できました。
検索テキストボックスに何も入力されていない状態で検索ボタンをクリックすると、全行表示できるようにしたいと思っています。

上記のコードに追加で、textBox1.Textが空であれば下記のコードを試してみましたがうまく結果得られませんでした。

//===========================================================================
this.table1TableAdapter.Fill(this.testDataSet.table1);
//===========================================================================

どのようにすれば実現できますでしょうか?
何度も見て頂き申し訳ありません。


No69488 (WebSurfer さん) に返信
> ■No69487 (ブルー さん) に返信
> 検索テキストボックスを空にし、再度検索ボタンをクリックすると、条件をクリアして、全件表示にしたいと思います。
>>
>>そこで、テキストボックスが空の場合は下記のようなコードを書いたのですが、解決できませんでした。
>>
>>//------------------------------------------------------------------------------
>>this.TableAdapter.Fill(this.DataSet.DataTable);
>>//------------------------------------------------------------------------------
>
> 「解決できませんでした」では不十分な情報だとは思いませんか?
>
> コードをアップされてますが、そのような断片的なコードで、自分のようなエスパーじゃない
> 回答者に何が問題か分かるとは期待しないでください。
>
> 掲示板の反対側にいて、掲示板に書いてあること以外は知り得ない回答者に、どのような情報
> を提供すれば質問者さんの状況を的確に把握できて、タイムリーに的を得た回答が得られるか、
> よく考えて質問を書いていただければと思います。
>
引用返信 編集キー/
■69492 / inTopicNo.6)  Re[5]: tableBindingSourceの検索方法
□投稿者/ WebSurfer (149回)-(2013/12/31(Tue) 00:25:36)
No69491 (ブルー さん) に返信
> 上記のコードに追加で、textBox1.Textが空であれば下記のコードを試してみましたがうまく結果得られませんでした。

「解決できませんでした」とか「うまく結果得られませんでした」だけでは、回答者
には何か起こっているのか分からないということを理解いただきたいと思います。

たとえば、「メールを送ろうとしましたがうまくいきませんでした、どうしたらいい
のでしょう?」と聞かれても答えようがないですよね。

少なくとも、具体的にどういう結果になったのか、コンパイルできたのか、エラーメ
ッセージなどは出たのか、エラーメッセージが出たのならその詳細は・・・ぐらいは
書きましょう。

それから「全行表示できるようにしたい」とは具体的にどういうことですか? 初期
画面に戻すのですか? それとも初期画面は「全行表示」ではないので、SELECT クエ
リを変える必要があるのですか?

想像で回答してもいいのですが、想像が違っていると混乱を招くのみです。また回答
者にとっても時間の無駄になります。回答者が余計な想像をしなくて済むよう、最初
から十分な情報を書いていただくようお願いします。
引用返信 編集キー/
■69502 / inTopicNo.7)  Re[6]: tableBindingSourceの検索方法
□投稿者/ ブルー (4回)-(2013/12/31(Tue) 21:29:19)
WebSurfer さん

お手数おかけしました。再び申し訳ありません。

やりたい事は再度下記URLに記載いたしました。
http://uploda.cc/img/img52c2b24e9cda2.jpg

検索ボタン押下時のコードは下記になります。

//===============================================================================================
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void table1BindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.table1BindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.testDataSet);

}

private void Form2_Load(object sender, EventArgs e)
{
// TODO: このコード行はデータを 'testDataSet.table1' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
this.table1TableAdapter.Fill(this.testDataSet.table1);

}

private void button1_Click(object sender, EventArgs e)
{
DataRow[] foundRows;

if (textBox1.Text != "")
{
foundRows = this.testDataSet.table1.Select("f1 = '" + textBox1.Text + "'");
table1BindingSource.DataSource = foundRows;
}
else
{
//↓↓RowNotInTableExceptionはユーザーコードによってハンドルされませんでした。
//この行はテーブルから削除されており、データは含まれていません。
//BeginEdit() を使うとこの行に新しいデータを作成することができます。というエラーメッセージが表示されます。
this.table1TableAdapter.Fill(this.testDataSet.table1);
}
}
}
}
//===============================================================================================

このコードを実行すると、検索テキストボックスに「a」を入力し検索ボタンを押下するとf1がaの行が抽出されます。
その後、検索テキストボックスを空にし、検索ボタンを押すとRowNotInTableExceptionエラーが表示されます。

最終的にやりたい事は、テキストボックスが空の場合はFormロード時と同じ状態でデータグリッドビューにデータが表示されてもらいたいです。

テキストボックスにデータを入力して検索ボタンを押下すると、DataTableのSelectメソッドでDataTableにフィルタをかけて、それを
BindingSource.DataSourceに紐付けを行っていると思います。
テキストボックスが空であれば、DataTableにSelectメソッドでフィルタをかけていたのを解除して、そのDataTableをBindingSource.DataSourceに
紐付けしたいと思っています。

説明下手で申し訳ありませんが、よろしくお願い致します。


No69492 (WebSurfer さん) に返信
> ■No69491 (ブルー さん) に返信
>>上記のコードに追加で、textBox1.Textが空であれば下記のコードを試してみましたがうまく結果得られませんでした。
>
> 「解決できませんでした」とか「うまく結果得られませんでした」だけでは、回答者
> には何か起こっているのか分からないということを理解いただきたいと思います。
>
> たとえば、「メールを送ろうとしましたがうまくいきませんでした、どうしたらいい
> のでしょう?」と聞かれても答えようがないですよね。
>
> 少なくとも、具体的にどういう結果になったのか、コンパイルできたのか、エラーメ
> ッセージなどは出たのか、エラーメッセージが出たのならその詳細は・・・ぐらいは
> 書きましょう。
>
> それから「全行表示できるようにしたい」とは具体的にどういうことですか? 初期
> 画面に戻すのですか? それとも初期画面は「全行表示」ではないので、SELECT クエ
> リを変える必要があるのですか?
>
> 想像で回答してもいいのですが、想像が違っていると混乱を招くのみです。また回答
> 者にとっても時間の無駄になります。回答者が余計な想像をしなくて済むよう、最初
> から十分な情報を書いていただくようお願いします。
引用返信 編集キー/
■69503 / inTopicNo.8)  Re[7]: tableBindingSourceの検索方法
□投稿者/ WebSurfer (150回)-(2014/01/01(Wed) 00:48:22)
No69502 (ブルー さん) に返信
> private void button1_Click(object sender, EventArgs e)
> {
> DataRow[] foundRows;
>
> if (textBox1.Text != "")
> {
> foundRows = this.testDataSet.table1.Select("f1 = '" + textBox1.Text + "'");
> table1BindingSource.DataSource = foundRows;
> }
> else
> {
> //↓↓RowNotInTableExceptionはユーザーコードによってハンドルされませんでした。
> //この行はテーブルから削除されており、データは含まれていません。
> //BeginEdit() を使うとこの行に新しいデータを作成することができます。というエラーメッセージが表示されます。
> this.table1TableAdapter.Fill(this.testDataSet.table1);
> }
> }

何故そのような例外が出るのかは追求してませんが・・・

DataSet/DataTable のインスタンスはそのまま残っているはずなので再度 Fill
する必要はなく、

this.table1TableAdapter.Fill(this.testDataSet.table1);



table1BindingSource.DataSource = this.testDataSet.table1;

に置き換えたらうまく行きそうな気がします。試してみてください。
引用返信 編集キー/
■69504 / inTopicNo.9)  Re[8]: tableBindingSourceの検索方法
□投稿者/ ブルー (5回)-(2014/01/01(Wed) 21:03:25)
WebSurferさん

あけましておめでとうございます。新年早々ありがとうございます。

> table1BindingSource.DataSource = this.testDataSet.table1;

こちらで、見事うまくいきました。感謝です!

No69503 (WebSurfer さん) に返信
> ■No69502 (ブルー さん) に返信
>> private void button1_Click(object sender, EventArgs e)
>> {
>> DataRow[] foundRows;
>>
>> if (textBox1.Text != "")
>> {
>> foundRows = this.testDataSet.table1.Select("f1 = '" + textBox1.Text + "'");
>> table1BindingSource.DataSource = foundRows;
>> }
>> else
>> {
>> //↓↓RowNotInTableExceptionはユーザーコードによってハンドルされませんでした。
>> //この行はテーブルから削除されており、データは含まれていません。
>> //BeginEdit() を使うとこの行に新しいデータを作成することができます。というエラーメッセージが表示されます。
>> this.table1TableAdapter.Fill(this.testDataSet.table1);
>> }
>> }
>
> 何故そのような例外が出るのかは追求してませんが・・・
>
> DataSet/DataTable のインスタンスはそのまま残っているはずなので再度 Fill
> する必要はなく、
>
> this.table1TableAdapter.Fill(this.testDataSet.table1);
>
> を
>
> table1BindingSource.DataSource = this.testDataSet.table1;
>
> に置き換えたらうまく行きそうな気がします。試してみてください。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -