DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
UpDate例外発生した場合に変数をcatchに渡したい(8) | NomalRejectChangesについて(2) | Nomal数字だけで構成されてるCSVフィールドが自動的に数値として解釈される(7) | NomalDataGridViewで検索をかける方法(3) | NomalDataGridViewの選択時の色を透明にしたい(3) | NomalPC機種によってスタートアップ画面が中央から左上にずれる、Fontがおかしくなる。(2) | Nomalタスクスケジュール登録時の例外メッセージ(2) | Nomal参照dllへの文字列引数をutf8で渡したい。(13) | Nomal管理者モードでクリック(2) | NomalVB2017でのインストーラ作成時のエラーについて(2) | Nomal文字列を8bit に戻してから UTF-8 に変換する方法(6) | NomalDatagridViewの行高さ変更について(4) | NomalWebRequest でメモリが解放されない(1) | NomalWebBrowserでWebページからのメッセージ(3) | NomalASP.NETから呼ばれているかどうか判定する方法(3) | NomalCA2213の警告が消えません(3) | NomalSQLServerテーブル内容をDataGridViewに表示するコードについて(6) | Nomaloo4oのAddTableをADOに移行したい(5) | Nomalデータバインド時のDataGridViewのカスタムソート(2) | NomalFunction プロシージャからの文字選択(1) | NomalMicrosoft Azure OCRのサンプルコード実行時エラー(2) | Nomal文字列構造体のListのソート(6) | NomalフォームコントロールへのDataBindingsでプロパティが相互反映されない(7) | NomalC# 現在のコンテキスト内にxxxという文字は存在しませんと出ます(3) | NomalWinFormsでWindows10のカメラアプリと連携したい(0) | NomalObject型からDecimalへの変換(2) | NomalWindows10(1803)からGetHostEntryでipv4が取得出来ない場合がある(2) | Nomalユーザーコントロールのプロパティが保存されない(2) | Nomal擬似言語をVBのプログラミングに変換(2) | Nomal「Environment.SpecialFolder.MyDocuments」の戻り値(2) | Nomalエクスプローラーのポインタ下のアイテムの取得(8) | NomalGIFで使うPNGファイルにおける容量削減について(5) | NomalProcess.StartでPDFファイルが開かない(Windows10)(3) | Nomal定数を複数繰り返す時(1) | Nomaloo4oのAddTableをODP.NETに移行したい(2) | NomalWindows標準TCPIPポートについて(4) | Nomalユーザーコントロールをツールバーに表示できない(8) | Nomalレンタルサーバからファイルを取得する方法を教えてください。(12) | NomalIEnumerableについてまとめてみました。(2) | NomalスレッドのwebbrowserでDocumentCompletedが来ない(2) | NomalList(of T)の抽出方法(3) | Nomalあまりにも基本的なことですが。(3) | NomalVB.netで作成されたプログラムからAccessのレポート印刷時にバーコードが表示されない(2) | NomalTextBoxの最大バイトを超えた分の文字を消す際の不具合(2) | Nomal折れ線グラフで基準値以内と基準値超過で色変え(6) | NomalFriend設定されているdllを利用することができますか?(3) | Nomal縦横変換してのTableの合算(4) | Nomalhtmlファイルへの関連付け(2) | NomalDataTableにSQLを実行できますか?(6) | Nomal.netからのAccessパスワード解除(2) | Nomal天気.jpに切断されます(2) | Nomalgifの容量をできるだけ軽くしたい(11) | NomalVB.NETでXMLファイルからデータを取得したい(2) | NomalAddStringの使い方(5) | NomalVS2015 Express インストール時のエラー(7) | Nomal2枚のPictureBoxを合成した上で描画したい(6) | Nomal自作ツールを標準ブラウザ候補に入れるには?(3) | NomalGraphicsUnit.Document使用時に解像度に合わせて位置決めしたい(2) | Nomal文字を円弧に沿って表示させたい(5) | Nomal【お知らせ】スマホでも見やすくなりました(0) | NomalVB.NetのWebBrowserでJavaScriptを呼び出したい(2) | Nomalサムネイルを新しい順にファイル名のみで表示したい。(4) | NomalEXCELでクリップボードを使用せずに書式付きでセルをコピー(5) | NomalDataGridView内でコンボボックスの選択をキャンセルする方法(1) | Nomalタブの色を他の処理から変更する方法(2) | Nomal同じデータセット内にテーブルの複製を作る方法(4) | Nomal配列を持つ自作クラスで、入れ替える関数を作成したい。(3) | NomalPowerPointをVBAでPDF化したい(0) | Nomalvs2017のC#で”現在のコンテキストに"Console"という名前は存在しません"と表示される(2) | NomalASP.NET 数分の処理でaspxの応答が無くなる(2) | NomalCSVのTextFieldParser読込時のオリジナル1行データの取得について(2) | NomalC# enum命名規則の抜け道(2) | Nomalマルチスレッドにおける画面の更新(4) | NomalCrystalReport 実行時にレポートエラー(0) | NomalCSVファイルから指定行を1行削除したい(2) | NomalDataGridView内での集計行追加を行いたい(6) | Nomal【VB.net】特殊なキーのコードとイベント(3) | Nomal「 No33447 の投稿について、質問があります」# webbrowserでjqueryのイベントを発生させたい(3) | Nomalwebbrowserでjqueryのイベントを発生させたい(7) | NomalVB.NETでの TCPClient通信をByteのみでしょうか?(3) | Nomal仮想デスクトップのスクリーンキャプチャ(Windows10, C#)(0) | NomalVB.netでPDF-XChange Viewerの印刷設定(2) | NomalExcel オートメーションエラーとなってしまう(1) | NomalPictureBoxで動画を2回目に表示させる際に0除算エラーが起きる。(0) | NomalListViewに動画ファイルのサムネイルを表示する(2) | NomalPictureBoxに動画を表示させた後に静止画を表示させる(3) | Nomal非同期デリゲートとスレッドプール(2) | NomalフォームのボタンがONと同じようにスイッチONでも動作させたい(0) | Nomal複数の図形を重ねて描画するには(4) | NomalSNSへ自動投稿したい(2) | Nomal外部アプリケーションのアクティブ化(0) | Nomal「UDP」65535byteを超える画像データの送信(4) | Nomal画像の中心で回転させたい(3) | NomalPLCとの通信PGMの設計(1) | Nomalディスプレイの認識番号を求めたい(8) | NomalListViewの画像のドラッグアンドドロップ(14) | NomalMaskedTextBoxに丸囲み数字が入力できない(2) | NomalFTPにてリモート サーバーがエラーを返しました: (550) (1) | Nomalエンターキーでのコントロール移動(4) | Nomalメッセージの表示(1) |



■記事リスト / ▼下のスレッド
■34133 / 親記事)  例外発生した場合に変数をcatchに渡したい
□投稿者/ ssd 一般人(1回)-(2019/02/15(Fri) 10:55:29)
  • アイコン環境/言語:[c# .net4.5] 
    分類:[.NET] 

    DataTable dt = new DataTable();
    try
    {
    foreach (DataRow dr in dt.Rows)
    {
    int iHogeOld = (int)dr["HOGE"];
    }
    }catch(Exception e)
    {
    //ここでdr["HOGE"]の値を表示したい
    }

    foreach内で型変換に失敗した場合、catch側で何が失敗したのか知りたいです。
    この場合、catchの方に変数の値を渡したいのですが、どうすればいいでしょうか?
違反を報告
引用返信

▽[全レス8件(ResNo.4-8 表示)]
■34137 / ResNo.4)  Re[3]: 例外発生した場合に変数をcatchに渡したい
□投稿者/ ひできち 一般人(2回)-(2019/02/15(Fri) 17:05:50)
  • アイコンNo34135に返信(ssdさんの記事)
    > foreach文の構文を確認してみると、下記のようになっています。
    >
    > foreach(型名 変数 in コレクション)
    > 文
    >
    > 実際に試してみると、dtは変数ですが、種類のように使用されていますと表示されます。

    いやーごめんなさい。適当な回答をしてしまいまして、申し訳なかったです

    局所的にcatch する方針でガリガリ書いてしまうのは
    あまりスマートとは言えないので、そうではなく実装したい場合は
    以下のようになりますね

    DataTable dt = new DataTable();
    DataRow dr = null;
    try
    {
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    dr = dt.Rows[i];
    int iHogeOld = (int)dr["HOGE"];
    }
    }
    catch (Exception e)
    {
    //ここでdr["HOGE"]の値を表示したい
    Console.WriteLine(dr["HOGE"]);
    }


違反を報告
引用返信
■34138 / ResNo.5)  Re[1]: 例外発生した場合に変数をcatchに渡したい
□投稿者/ 魔界の仮面弁士 大御所(1196回)-(2019/02/15(Fri) 17:51:45)
  • アイコン2019/02/15(Fri) 18:59:22 編集(投稿者)

    No34133に返信(ssdさんの記事)
    > DataTable dt = new DataTable();
    > try
    > {
    >  foreach (DataRow dr in dt.Rows)
    >  {

    行数が 0 なのでそもそもループ処理に入らないですが、
    それは本題ではないので置いといて…。



    > catch(Exception e)

    そもそも論で言えば、すべての例外を無条件に拾うことは望ましくありません。

    実行時例外で処理するしかない処理(通信エラー等)以外は捕らえるべきではないので、
    「int に変換できないような値が DataTable に混入しないようにする」か、
    「int に変換できる場合にのみキャストする」などして、
    例外を発生しないコードに書き換えることも検討してみてください。


    例外処理のための参考資料を紹介しておきます。
    https://blogs.msdn.microsoft.com/nakama/2008/12/29/net-part-1/
    https://blogs.msdn.microsoft.com/nakama/2009/01/02/net-part-2/
    https://blogs.msdn.microsoft.com/nakama/2009/01/18/net-part-3/
    https://blogs.msdn.microsoft.com/nakama/2009/01/23/net-part-4/
    https://blogs.msdn.microsoft.com/nakama/2009/01/08/netjava/


    >   int iHogeOld = (int)dr["HOGE"];

    ということで、例外が発生しないようにする方法の一つとして、
     // int 以外は(DBNull など)は -999 として取り扱う
     int intHoge = dr["HOGE"] as int? ?? -9999;
    のようにするという手もあろうかと思います。



    > foreach内で型変換に失敗した場合、catch側で何が失敗したのか知りたいです。

    何らかの理由で、catch で捕らえる必要があるのだとしても、
    例外処理として「型変換」のみを取り扱いたいのであれば、
    【Exception】ではなく【InvalidCastException】を捕らえるべきかと思います。


    foreach (DataRow dr in dt.Rows)
    {
     // object[] rawData = dr.ItemArray; // 全部の列の値をまとめて取得
     object rawHoge = dr["HOGE"]; // 特定の列の値のみ取得
     try
     {
      int iHoge = (int)rawHoge; // int 型に unbox
     }
     catch (InvalidCastException)
     {
      Console.WriteLine("HOGE 列の値「{0}」を int に変換できませんでした。(型名:{1})", rawHoge, rawHoge.GetType().FullName);
      // throw;
     }
    }



    >   int iHogeOld = (int)dr["HOGE"];

    実際の値が DBNull や long であった場合、上記の処理は確かに失敗しますが、
    ここで発生しうる例外は、unbox の失敗によるものだけではないはずです。


    たとえば列名が間違っていれば、引数例外の【ArgumentException】が起きることもありますし、
    削除済み行にアクセスしようとして【DeletedRowInaccessibleException】となることもあるわけで。
違反を報告
引用返信
■34139 / ResNo.6)  Re[2]: 例外発生した場合に変数をcatchに渡したい
□投稿者/ ssd 一般人(3回)-(2019/02/15(Fri) 18:04:37)
  • アイコン
    まりもんさん
    
    catch(Exception e)
     {
      //ここで出力
        Console.WriteLine(dr["HOGE"]);
        Throw;
    }
    
    の箇所でConsole.WriteLine(dr["HOGE"]);は出力できないような気がします。
    試してみましたがはやり駄目でした。
    
    ご回答ありがとうございます。

違反を報告
引用返信
■34140 / ResNo.7)  Re[2]: 例外発生した場合に変数をcatchに渡したい
□投稿者/ ssd 一般人(4回)-(2019/02/15(Fri) 18:06:47)
  • アイコンひできちさん

    foreachではなく、forでやるのですか。
    なるほど、なるほど。何か良い気がします。ありがとうございます。
違反を報告
引用返信
■34141 / ResNo.8)  Re[3]: 例外発生した場合に変数をcatchに渡したい
□投稿者/ タイガー 一般人(1回)-(2019/02/18(Mon) 14:40:25)
  • アイコン
    > catch(Exception e)
    > {
    >   //ここで出力
    > Console.WriteLine(dr["HOGE"]);
    > Throw;
    > }
    >
    > の箇所でConsole.WriteLine(dr["HOGE"]);は出力できないような気がします。
    > 試してみましたがはやり駄目でした。

    もりまんさんのコードはtry〜catchの2段重ねで、上記は内側のcatchのため、dr["HOGE"]は表示できますよ。

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-8]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34130 / 親記事)  RejectChangesについて
□投稿者/ samba 一般人(1回)-(2019/02/12(Tue) 18:00:37)
  • アイコン環境/言語:[4.5,win 10 visual studio 2017] 
    分類:[.NET] 

    下記のようなDataTableがあります。
    各行に対して、追加、削除、値変更などをしています。

    dataset.Tables["Table1"].Rows[2].Delete();を実行してから、
    この行のみDeleteをキャンセルしたくない場合があります。

    RejectChanges()を行うと、変更した部分が全部取り消しになってしまいます。
    特定の行をDelete()してしまったあとに、その行だけ復活させたいと
    いった場合はどのようにおこなえばよいでしょうか?

    DataSet dataset = new DataSet();
    DataTable dt = new DataTable("Table1");

    // 列を定義します。
    dt.Columns.Add("商品番号");
    dt.Columns.Add("商品名");
    dt.Columns.Add("価格");

    DataRow row = null;

    // 商品を追加します。
    row = dt.NewRow();
    row["商品番号"] = "S0001";
    row["商品名"] = "あんぱん";
    row["価格"] = 100;
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["商品番号"] = "S0002";
    row["商品名"] = "メロンパン";
    row["価格"] = 105;
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["商品番号"] = "S0003";
    row["商品名"] = "カレーパン";
    row["価格"] = 110;
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["商品番号"] = "S0004";
    row["商品名"] = "いちごジャムパン";
    row["価格"] = 115;
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["商品番号"] = "S0005";
    row["商品名"] = "チョココロネ";
    row["価格"] = 120;
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["商品番号"] = "S0006";
    row["商品名"] = "クロワッサン";
    row["価格"] = 125;
    dt.Rows.Add(row);

    // DataSetにdtを追加します。
    dataset.Tables.Add(dt);
    dataset.Tables["Table1"].AcceptChanges();

    // メロンパンの価格を変更します。
    dataset.Tables["Table1"].Rows[1]["価格"] = 110;

    // クリームパンを追加します。
    DataRow datarow = dataset.Tables["Table1"].NewRow();

    datarow["商品番号"] = "S0007";
    datarow["商品名"] = "クリームパン";
    datarow["価格"] = "130";

    dataset.Tables["Table1"].Rows.Add(datarow);

    // カレーパンを削除します。
    dataset.Tables["Table1"].Rows[2].Delete();


    // 元に戻します。
    dataset.Tables["Table1"].RejectChanges();
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34131 / ResNo.1)  Re[1]: RejectChangesについて
□投稿者/ 魔界の仮面弁士 大御所(1195回)-(2019/02/12(Tue) 18:36:00)
  • アイコンNo34130に返信(sambaさんの記事)
    > dataset.Tables["Table1"].Rows[2].Delete();を実行してから、
    > この行のみDeleteをキャンセルしたくない場合があります。
    > RejectChanges()を行うと、変更した部分が全部取り消しになってしまいます。

    DataTable.RejectChanges ではなく
    DataRow.RejectChanges を呼び出しましょう。
違反を報告
引用返信
■34132 / ResNo.2)  Re[2]: RejectChangesについて
□投稿者/ samba 一般人(2回)-(2019/02/13(Wed) 11:06:46)
  • アイコンありがとうございます!
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34114 / 親記事)  数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ Iraquser 一般人(1回)-(2019/02/05(Tue) 11:16:21)
  • アイコン環境/言語:[Win10 c#] 
    分類:[.NET] 

    いつもお世話になっています。「CSV形式のファイルをDataTableや配列等として
    取得する」(https://dobon.net/vb/dotnet/file/readcsvfile.html)を参考に、
    CSVから情報を読み取るアプリを作成中です。
    入力するCSVデータの中に数字のみで構成されたフィールドを含んでおり、先
    頭(最上位桁)が「0」の場合にエラーが発生して困っています。フィールドを
    構成する文字が数字だけのため自動的に整数型と判断されるようです。
    数字だけで構成されたフィールドも文字列として認識させるためには、それなり
    のコードを自分達で書くしかないのでしょうか。該当フィールドをダブルクォー
    テーションで囲むとか、schema.iniを同じディレクトリに作成するとかすれば解
    決する事は判っているのですが、CSVを吐くセクションが顧客資産の時代物(
    ソースが行方不明)で変更は事実上不可能、それなりのコードを自分達(?)で
    書く事は大人の事情でハードルが高い事を御理解の上で御指導お願いします。
    
    >        private void Form1_Shown(object sender, EventArgs e) {
    >            ReadCSV();
    >        }
    >        private void ReadCSV() {
    >            //CSVファイルのあるフォルダ
    >            string csvDir = System.Environment.CurrentDirectory;
    >            //CSVファイルの名前
    >            string csvFileName = "test.csv";
    >            //接続文字列
    >            string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    >                + csvDir + ";Extended Properties=\"text;HDR=No;FMT=Delimited\"";
    >            System.Data.OleDb.OleDbConnection con =
    >                new System.Data.OleDb.OleDbConnection(conString);
    >            string commText = "SELECT * FROM [" + csvFileName + "]";
    >            System.Data.OleDb.OleDbDataAdapter da =
    >                new System.Data.OleDb.OleDbDataAdapter(commText, con);
    >            //DataTableに格納する
    >            DataTable dt = new DataTable();
    >            da.Fill(dt);
    >        }
    
    入力データ
    >001,01234
    >012,ABCDE
    >123,あいうえお
    
    
    

286×193 => 250×168
イメージ
1549332981.png
/2KB
違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■34117 / ResNo.3)  Re[1]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ まりもん 一般人(5回)-(2019/02/05(Tue) 12:24:23)
  • アイコン出力されるCSVのフォーマットは決まっているのでしょうから、schema.iniを読み込み側が用意すれば言いだけなのではないですか?
    CSVを出力する側が用意する決まりがあるわけでもないですし。
違反を報告
引用返信
■34118 / ResNo.4)  Re[2]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ Iraquser 一般人(2回)-(2019/02/05(Tue) 13:55:40)
http://Win10 c#
  • アイコンNo34116に返信(魔界の仮面弁士さんの記事)

    魔界の仮面弁士さん、お世話になります。

    > データ中に「改行」「"」「,」などの特殊文字を含むような CSV で無いのなら、
    > File.ReadAllLines を Split するような LINQ 式で処理した方が手っ取り早いかも。
    そうですね。No34116のCSV例では含んでいませんが、実際のデータは改行を
    含みます。

    > もし、Jet/ACE を使って取り込む方法を採用するのであれば、
    > 取りうる選択肢としては下記の 3 通り。
    案1に関して同様のプランを検討しましたが、CSVが吐き出されるフォルダ
    が顧客側領域にあり、我々に更新権限がないため schema.ini の動的配置は難
    しく諦めた経緯があります。

    案2・案3の提案、ありがとうございます。当プログラムが動作する可能性の
    ある全PCのレジストリを顧客側各支店担当者様に更新して頂く事、あまりに
    も恐ろしく、尻込みしておりました。

    Jet/ACE を利用する以上、数字のみで構成されたフィールドは自動的に整数と
    認識されてしまう事、仕方のない事と理解しました。CSV入力プログラムの
    独自開発や案1〜3を含め、もう少し検討したいと思います。
    ありがとうございました。

違反を報告
引用返信
■34119 / ResNo.5)  Re[1]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ Iraquser 一般人(4回)-(2019/02/05(Tue) 14:02:57)
http://Win10 c#
  • アイコンNo34114に返信(Iraquserさんの記事)
    自己レスです。[解決済み]のチェックを忘れてました。

解決み!
違反を報告
引用返信
■34120 / ResNo.6)  Re[3]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ 魔界の仮面弁士 大御所(1194回)-(2019/02/05(Tue) 14:12:34)
  • アイコン2019/02/05(Tue) 14:18:11 編集(投稿者)

    # 解決済みチェックはそのままにしておきます。

    No34118に返信(Iraquserさんの記事)
    > 案1に関して同様のプランを検討しましたが、CSVが吐き出されるフォルダ
    > が顧客側領域にあり、我々に更新権限がないため schema.ini の動的配置は難
    > しく諦めた経緯があります。

    読み取り権限があるのなら、対象の CSV ファイルを
    Schema.ini を配置しておいた「一時作業用フォルダー」に
    コピーすることで回避できるのではないでしょうか。


    サイズが大きくて、ファイルのコピー負荷が問題になるようであれば、
    ハードリンクもしくはシンボリックリンクを試してみるとか。
解決み!
違反を報告
引用返信
■34129 / ResNo.7)  Re[4]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ Iraquser 一般人(5回)-(2019/02/08(Fri) 11:10:53)
http://Win10 c#
  • アイコンNo34120に返信(魔界の仮面弁士さんの記事)

    > 読み取り権限があるのなら、対象の CSV ファイルを
    > Schema.ini を配置しておいた「一時作業用フォルダー」に
    > コピーすることで回避できるのではないでしょうか。
    はい、そうだと思います。検討案のひとつでした。

    結局、CSV解析プログラムの独自開発と言う事に決着しました。この部分を
    開発する要員として、顧客側の若手社員様を割り当てる(押し付けられる)事
    が決まっておりましたため、できる限りシンプルな構造にしたかったんです。
    でも、複数の(ソース管理すら出来てない)プログラムが吐いたCSVを解析
    するプログラムの設計・開発は、プログラミングに不慣れな顧客側若手社員様
    には荷が重いと判断し、自社の要員に担当させる事で顧客の了承を頂きました。

    丁寧なアドバイス、ありがとうございました」。

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-7]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34125 / 親記事)  DataGridViewで検索をかける方法
□投稿者/ 武蔵 一般人(4回)-(2019/02/06(Wed) 17:27:46)
  • アイコン環境/言語:[Win 7, VS2015, C# .NET 4.6] 
    分類:[.NET] 

    下記のサイトを参考に型付DataSetとTableAdapterを作りました。
    http://okwakatta.net/code/ado10.html

    そして、TableAdapterを使ってWinFormのDataGridView上にデータを表示することができました。

    using dta = Test.HPDataSetTableAdapters;

    public partial class Form1 : Form
    {
    private void button2_Click(object sender, EventArgs e)
    {
    using (dta.breadTableAdapter ta = new dta.breadTableAdapter())
    {
    HPDataSet ds = new HPDataSet();

    // データを抽出します。
    ta.Fill(ds.bread);
    this.DataGridView1.DataSource = this.ds.bread;
    }
    }
    }

    やりたい事は、Formにはtextboxが一つあります。このtextboxに入力された値で絞り込み検索をかけたいです。
    例えば、上記のサイトデータを使うと、

    select id,name,price from bread where price = テキストボックスの値;

    で絞り込んで、その結果をDataGridViewに表示したいです。
    既にDataSet上にデータがあるので、再度データベースに問合せをしてデータ取得してくるのは違うような気がします。

    どのように絞り込みをかけたらよいか教えてください!宜しくおねがいします。
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34126 / ResNo.1)  Re[1]: DataGridViewで検索をかける方法
□投稿者/ Hongliang 大御所(553回)-(2019/02/06(Wed) 20:34:42)
  • アイコンDataSourceに(型付)DataTableを設定しているのであれば、DataGridViewはそのDataTableのDefaultViewであるDataViewを使って入出力するデータを管理します。
    DataViewにはRowFilterというプロパティがあり、SQLのWHERE句に似た書式でフィルタリングを設定することができます。
    https://docs.microsoft.com/ja-jp/dotnet/api/system.data.dataview.rowfilter

    // こんな感じになります
    this.ds.bread.DefaultView.RowFilter = String.Format("price = {0}", this.TextBox1.Text);
違反を報告
引用返信
■34127 / ResNo.2)  Re[2]: DataGridViewで検索をかける方法
□投稿者/ 武蔵 一般人(5回)-(2019/02/07(Thu) 09:47:24)
  • アイコンthis.ds.bread.DefaultView.RowFilter = String.Format("price = '{0}'", this.TextBox1.Text);

    でフィルタかけられました。ありがとうございます!
違反を報告
引用返信
■34128 / ResNo.3)  Re[3]: DataGridViewで検索をかける方法
□投稿者/ 武蔵 一般人(6回)-(2019/02/07(Thu) 09:47:44)
  • アイコンありがとうございます。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▲上のスレッド
■34121 / 親記事)  DataGridViewの選択時の色を透明にしたい
□投稿者/ 武蔵 一般人(1回)-(2019/02/05(Tue) 17:30:39)
  • アイコン環境/言語:[Win 7, VS2015, C# .NET 4.6] 
    分類:[.NET] 

    DataGridViewのセルを選択した時の背景色について教えてください。

    特定のセルに文字列が入っています。例えばDataGridView1[0,0]に「ABC」と入力されています。
    このセルをクリックすると背景色が赤色にかわります。文字色も赤色にかわるようにしています。

    private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){
    DataGridView1[0,0].Style.BackColor = Color.Red;
    DataGridView1[0,0].Style.ForeColor = Color.Red;
    }

    ここまではよいのですが、セルを選択すると背景色が青で表示され入力された「ABC」という
    文字が見えてしまいます。

    やりたいことは、2点あります。

    @
    特定のセル選択時に背景色が青くならないように透明にしたいです。

    A
    @の問題が解決しても、行選択すると入力された文字が見えてしまいます。
    特定のセルに入力した文字列を透明か非表示みたいにすることはできるでしょうか?


    以上、宜しくおねがいします。

    ※選択時、背景色が青で表示されるというのは、下記の画像のような事を指しています。
    https://stackoverflow.com/questions/15549143/datagridview-selected-cell-default-color
違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■34122 / ResNo.1)  Re[1]: DataGridViewの選択時の色を透明にしたい
□投稿者/ Hongliang 大御所(552回)-(2019/02/05(Tue) 17:44:07)
  • アイコンStyleのSelectionBackColorおよびSelectionForeColorも変更すればいいのではないでしょうか。
    // 色変更の契機がCellClickというのは、実現したいことのイメージをつかめないですが。

    セルが編集できるのであれば、文字列選択による反転も考える必要があります。
違反を報告
引用返信
■34123 / ResNo.2)  Re[2]: DataGridViewの選択時の色を透明にしたい
□投稿者/ 武蔵 一般人(2回)-(2019/02/05(Tue) 21:12:22)
  • アイコンHongliang さん

    >StyleのSelectionBackColorおよびSelectionForeColor

    ありがとうございます。試してみます。


    セルの編集は不可にしてあります。
    データベースにユーザーの色情報(RGB)を登録しています。
    DataGridViewにデータを表示する時に、その色情報を使ってセルに色をつけます。

    また、ユーザーに色情報を手軽に変更できるようにしたいと思っています。
    そこで思いついたのがセルをクリックすると、例えばセルの色が赤色になり、
    RGBの情報をセルに入力。RGB情報をデータベースに登録ということを考えていました。
    なので、セルに入力されたRGBの色情報が見えると格好が悪いかなと思って
    質問させていただきました。



違反を報告
引用返信
■34124 / ResNo.3)  Re[3]: DataGridViewの選択時の色を透明にしたい
□投稿者/ 武蔵 一般人(3回)-(2019/02/06(Wed) 10:42:11)
  • アイコン解決しました。ありがとうございます。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]






Mode/  Pass/


- Child Tree -

2019/02/18(Mon) 17:01:24 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする