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

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

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

Re[8]: C#でFromのDataGridViewにDBを表示


(過去ログ 82 を表示中)

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

■48729 / inTopicNo.1)  C#でFromのDataGridViewにDBを表示
  
□投稿者/ tks (1回)-(2010/04/13(Tue) 16:30:39)

分類:[C#] 

2010/04/13(Tue) 16:31:04 編集(投稿者)
2010/04/13(Tue) 16:30:58 編集(投稿者)

初歩的なことでお恥ずかしいのですが現在郵便番号から住所を検索するWindowsアプリケーションを作成しております。
言語はC#、開発はVSを使用しております。

郵便番号の入力ボックスは二つ。同じフォーム内にDataGridViewを配置して[検索]ボタンを押したら郵便番号に対応する住所一覧をDataGridViewに表示させたいのですがどうもうまくいきません。

DBにはAccessを使用しています.mdbです。

それともう一点なんですがVB時代にAutoTabという機能があったのですがC#にはないのでしょうか?
自分で書くとするとどういう表記になるのでしょうか・・

上記二点とも自分で調べ、何度も試行錯誤したのですがなかなかうまく行かないのです・・。

AutoTabの方は調べた結果bool AutoTab { get; set; }これをどうにかするようなのですがなぜboolなどが出てくるのでしょうか?

申し訳ないのですがお力添えをお願いいたします。
引用返信 編集キー/
■48730 / inTopicNo.2)  Re[1]: C#でFromのDataGridViewにDBを表示
□投稿者/ .SHO (1281回)-(2010/04/13(Tue) 16:37:43)
No48729 (tks さん) に返信

> 郵便番号の入力ボックスは二つ。同じフォーム内にDataGridViewを配置して[検索]ボタンを押したら郵便番号に対応する住所一覧をDataGridViewに表示させたいのですがどうもうまくいきません。

これで答えられるわけがないですよね。
何がどううまくいかないのか書いてください。

引用返信 編集キー/
■48733 / inTopicNo.3)  Re[2]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (2回)-(2010/04/13(Tue) 16:59:49)
No48730 (.SHO さん) に返信

申し訳ありません。具体的にいいますと

            OleDbConnection dbc;
            OleDbCommand dc;
            OleDbDataReader ddr;

            String strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0" +
                                     ";Data Source=ZipDB.mdb" +
                                     ";Password=\"\"" +
                                     ";User ID=Admin";
            // DB接続
            try
            {
                // DBコネクション作成
                dbc = new OleDbConnection(strDBConnection);

                // DBコネクションを開く
                dbc.Open();

                // データを抽出するためのクエリー作成
                String strSQL = "Select * From ken_all";

                dc = new OleDbCommand(strSQL, dbc);
                ddr = dc.ExecuteReader();

                MessageBox.Show("接続完了。");

                // DBコネクションを閉じる
                dbc.Close();
            }
            catch (Exception ee)
            {
                MessageBox.Show("DB Connection を確立できませんでした。" + ee.Message);
            }

このようなソースで接続できるまでは確認しているのですがSQL文を埋め込んで、それをGirdViewに表示する方法がわからないのです。
お力添えお願いします。

引用返信 編集キー/
■48734 / inTopicNo.4)  Re[1]: C#でFromのDataGridViewにDBを表示
□投稿者/ 魔界の仮面弁士 (1614回)-(2010/04/13(Tue) 17:12:13)
No48729 (tks さん) に返信
> C#でFromのDataGridViewにDBを表示

From ?


> 郵便番号の入力ボックスは二つ。同じフォーム内にDataGridViewを配置して[検索]ボタンを押したら
> 郵便番号に対応する住所一覧をDataGridViewに表示させたいのですがどうもうまくいきません。

質問は具体的に記述してください。

・コードは書いてみたが、×××のところで○○○というエラーが出てしまう。
・mdb のデータを取得するために、何をして良いのか分からない。
・データは取得できているが、それを DataGridView に表示させる方法が分からない。
・Access 変換ウィザードを使って VB.NET に変換したが、その中の△△の部分を C# に置き換えられない。
http://www.microsoft.com/japan/msdn/archive/office/access/acwguide.aspx


> それともう一点なんですがVB時代にAutoTabという機能があったのですがC#にはないのでしょうか?
VB に AutoTab という機能はありません。

もしかして(VB ではなく)Access VBA の TextBox にあった AutoTab プロパティの事でしょうか?
http://office.microsoft.com/ja-jp/access/HA012327211041.aspx
だとすれば該当機能は無いので、フォーカス移動に関しても自分で作りこむ必要があります。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.selectnextcontrol.aspx
引用返信 編集キー/
■48736 / inTopicNo.5)  Re[3]: C#でFromのDataGridViewにDBを表示
□投稿者/ 魔界の仮面弁士 (1615回)-(2010/04/13(Tue) 17:18:14)
No48733 (tks さん) に返信
> OleDbDataReader ddr;
> ddr = dc.ExecuteReader();
DataReader を使う方法だと、DataGridView の行/セルにデータを転記する作業が必要になってしまいます。

今回の場合は、「OleDbDataAdapter」を使って、DataSet(DataTable/DataView) に
データを蓄えた方が良いでしょう。そうすれば、それを DataGridView の DataSource プロパティに
割り当てるだけですみます。

下記は SqlDataAdapter の場合のサンプルですが、OleDbDataAdapter を使った場合にも考え方は同じです。
http://msdn.microsoft.com/ja-jp/library/fbk67b6z.aspx
引用返信 編集キー/
■48739 / inTopicNo.6)  Re[4]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (4回)-(2010/04/13(Tue) 17:30:34)
No48736 (魔界の仮面弁士 さん) に返信
すみません、わざわざありがとうございます。
上記のサイトを参考にもう少し作業してみます。

他の方にも言われているようにもう少し調べて疑問点を簡潔に書くようにします。
引用返信 編集キー/
■48765 / inTopicNo.7)  Re[2]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (5回)-(2010/04/14(Wed) 10:11:16)
No48734 (魔界の仮面弁士 さん) に返信
> ■No48729 (tks さん) に返信
> もしかして(VB ではなく)Access VBA の TextBox にあった AutoTab プロパティの事でしょうか?
> http://office.microsoft.com/ja-jp/access/HA012327211041.aspx
> だとすれば該当機能は無いので、フォーカス移動に関しても自分で作りこむ必要があります。
> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.selectnextcontrol.aspx


先日はお世話になりました。今回は上記の件なのですが、フォーカス移動に関して自分で作りこんでいて、
Enterなど特定のキーを押すとタブ移動するという動作はできるようになったのですが、ある一定の字数になったらタブ移動する。という動作ができません。

TextBoxのLengthをとってきて見比べるという考えにいたっているのですが記述方法がわかりませんでした。
お力をお貸しください。
引用返信 編集キー/
■48766 / inTopicNo.8)  Re[3]: C#でFromのDataGridViewにDBを表示
□投稿者/ .SHO (1287回)-(2010/04/14(Wed) 10:15:25)
No48765 (tks さん) に返信

> TextBoxのLengthをとってきて見比べるという考えにいたっているのですが記述方法がわかりませんでした。
> お力をお貸しください。

TextBoxでキーが押されたら、Text.Length を判断して移動するだけでは?
引用返信 編集キー/
■48767 / inTopicNo.9)  Re[4]: C#でFromのDataGridViewにDBを表示
□投稿者/ みきぬ (859回)-(2010/04/14(Wed) 10:25:02)
>>TextBoxのLengthをとってきて見比べるという考えにいたっているのですが記述方法がわかりませんでした。
>>お力をお貸しください。
>
> TextBoxでキーが押されたら、Text.Length を判断して移動するだけでは?

ちなみにそれだけだと、一度最大長まで入力した文字列を編集するときにもカーソルが移動しちゃってマズーなので、カーソルがTextBoxの最後にあるかどうかのチェックも同時にしたほうがいいかも。

TextBox.SelectionStart の値が TextBox.MaxLength の値と等しいかどうかを確認すればいい、はず。
引用返信 編集キー/
■48768 / inTopicNo.10)  Re[4]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (6回)-(2010/04/14(Wed) 10:28:22)
No48766 (.SHO さん) に返信
> TextBoxでキーが押されたら、Text.Length を判断して移動するだけでは?

返信有難うございます。全くもっておっしゃる通りなのですが、やりたいことが頭の中にあるのですが書式としてかけないのです。
if (Text.Length == 3)
{
this.SelectNextControl(this.ActiveControl, true, true, false, true);
}

のような感じかなと頭の中にあるのですがコンパイルは通るのですがうまく行ってくれませんでした。
なにか違うのでしょうか?
引用返信 編集キー/
■48771 / inTopicNo.11)  Re[5]: C#でFromのDataGridViewにDBを表示
□投稿者/ .SHO (1288回)-(2010/04/14(Wed) 10:58:34)
No48767 (みきぬ さん) に返信

> ちなみにそれだけだと、一度最大長まで入力した文字列を編集するときにもカーソルが移動しちゃってマズーなので、カーソルがTextBoxの最後にあるかどうかのチェックも同時にしたほうがいいかも。
>
> TextBox.SelectionStart の値が TextBox.MaxLength の値と等しいかどうかを確認すればいい、はず。

ちなみにそれだけだと、カーソルが文字列中にあり文字を追加して最大長に達した場合……
つーことで、文字入力があった場合(BSとかEnterとかを除外)のみ判断ですね。

引用返信 編集キー/
■48772 / inTopicNo.12)  Re[5]: C#でFromのDataGridViewにDBを表示
□投稿者/ .SHO (1289回)-(2010/04/14(Wed) 11:00:56)
No48768 (tks さん) に返信

> 返信有難うございます。全くもっておっしゃる通りなのですが、やりたいことが頭の中にあるのですが書式としてかけないのです。
> if (Text.Length == 3)
> {
> this.SelectNextControl(this.ActiveControl, true, true, false, true);
> }
>
> のような感じかなと頭の中にあるのですがコンパイルは通るのですがうまく行ってくれませんでした。
> なにか違うのでしょうか?

この情報だけではなんとも…
Enterキーでの移動はうまくいっているようなので、
this.SelectNextControl(this.ActiveControl, true, true, false, true);
は問題ないんですよね?
とりあえず、if分とっぱらって1文字で移動するか確認してはどうでしょう?
引用返信 編集キー/
■48773 / inTopicNo.13)  Re[6]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (8回)-(2010/04/14(Wed) 11:07:15)
No48771 (.SHO さん) に返信
No48767 (みきぬ さん) に返信

すみません何とか動いてくれました!
原因は書いていたところがKeyPressだったのがまずかったみたいです。
TextChangedのほうに
if (textBox1.Text.Length == textBox1.MaxLength)
{
this.SelectNextControl(this.ActiveControl, true, true, false, true);
}
このような書式で書いたら無事動作したのを確認しました。
お騒がせして申し訳ありませんでした。
引用返信 編集キー/
■48774 / inTopicNo.14)  Re[7]: C#でFromのDataGridViewにDBを表示
□投稿者/ 魔界の仮面弁士 (1619回)-(2010/04/14(Wed) 11:15:39)
# まだ解決済みでは無いのかな?

No48773 (tks さん) に返信
> このような書式で書いたら無事動作したのを確認しました。

一応補足。TextChanged は プログラムから Text を変更した場合にも発生しますので、
そのコードだと、Button1_Click などから「textBox1.Text = "最大長の文字列";」を
実行したときにもフォーカスが移動してしまいます。

ユーザーからの入力のみに対応させたいのであれば、
『if (textBox1.Modified)』という条件も加えておいたほうが良いでしょう。
引用返信 編集キー/
■48776 / inTopicNo.15)  Re[6]: C#でFromのDataGridViewにDBを表示
□投稿者/ みきぬ (860回)-(2010/04/14(Wed) 11:29:51)
>>ちなみにそれだけだと、一度最大長まで入力した文字列を編集するときにもカーソルが移動しちゃってマズーなので、カーソルがTextBoxの最後にあるかどうかのチェックも同時にしたほうがいいかも。
>>
>>TextBox.SelectionStart の値が TextBox.MaxLength の値と等しいかどうかを確認すればいい、はず。
>
> ちなみにそれだけだと、カーソルが文字列中にあり文字を追加して最大長に達した場合……
> つーことで、文字入力があった場合(BSとかEnterとかを除外)のみ判断ですね。

なんか理解されてない気がするので要約すると、
「文字列が最大長に達したときに、カーソルが末尾にあればいいんじゃね?」
ていうのが私のアイデアです。
引用返信 編集キー/
■48778 / inTopicNo.16)  Re[7]: C#でFromのDataGridViewにDBを表示
□投稿者/ 774RR (495回)-(2010/04/14(Wed) 11:41:34)
すでに最大長の文字列がセットされているときに backspace で末尾から消したい、とか
そういう操作まで考慮しておかないとにっちもさっちも行かなくなりそうな希ガス
引用返信 編集キー/
■48779 / inTopicNo.17)  Re[8]: C#でFromのDataGridViewにDBを表示
□投稿者/ tks (9回)-(2010/04/14(Wed) 12:00:57)
ふむふむ、皆様の考えを色々ためしてみたのですがどうもバグが発生したりしていたので
if (textBox1.Modified)この条件式をプラスしたものだけ使うようにいたしました。

ちなみに774RR様がおっしゃっている末尾から消したいなどは実装できましたので今のところ正常に動いています。
みきぬ様のお考えも大変勉強になったのですがまだ技術レベルが届いてなく最低限の動作にしました。

以上をもちまして一旦〆させていただきます。皆様本当にありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -