WinFormsWindowsフォームでデータバインディングを行う場合に、BindingSource、IDataErrorInfo、ErrorProvider、null値の制御についての有用なリンク集。.NET以前にWindowsフォームで作成したアプリケーションを修正する機会があり、BindingSourceについて理解が深まったので、記録を残しておく。「TextBoxに入力した値をバリデーションして、正しい値ならば紐づいたDBのレコードを更新する」というよくある処理を実装する場合、BindingSourceを使用してBindingを行うと以下のようなケースで便利だった。バリデーションでエラーになったら、変更前の値を復元したいバリデーション処理は、Validatingイベントを使用すると思うが、パラメータから取得できる値、TextBoxフィールドの値も変更後の値になっている。このままでは変更前の値を取得できないため、変更前の値を格納するフィールドを用意すると思うが、実はBindingSourceを使っていると変更前のフィールドがいらなくなる。それは、BindingSourceから名前付きDataRowを取得でき、それが入力前の値を持っているからだ。名前付きDataRowの取得、入力前の値の取得は、以下のように行う。DataRowVersion.Original].ToString();}//originalTextを使用して変更前の値を代入する処理などレコードを更新する時に、値が変更されている場合のみ更新したいバリデーション後の更新では、Validatedイベントを使用すると思うが、値が変更されていないのに毎回DBに接続して更新するのもムダなので、値が変わった場合のみ更新をしたい。DBから取得した値と比較する方法があるが、対象が1つの画面からしか更新されない場合、取得のために毎回DBに接続すると、DB接続回数が増えてしまう。上記の変更前の値を使用して、入力値と比較する事もできるが、実はBindingSourceを使っているともっと簡単な方法がある。それは、BindingSourceから取得できる名前付きDataRowが、変更情報を持っているからだ。変更されたかどうかの判定は以下のように行う。//rowは、名前付きDataRowクラス名のインスタンス。取得方法は上記と一緒。//データが変更された場合に行う処理(DB更新処理など)}以上。NPOINPOIを使用してExcelを読み込む処理を作成したので、後から見返せるように気づいたことをメモしておく。2.3.0Excelのセルの値を取得する場合は、以下のようにまずICellインスタンスを取得する。sheet.GetRow(行番号).GetCell(列番号);数値や文字列を取得するICellインターフェイスで宣言されているプロパティから値を取得することが出来る。セルが空の場合も対応している。string型の""(空文字)関数の結果を取得するNumericCellValueプロパティや、StringCellValueプロパティは、セルの値が関数の場合、関数を評価した結果を返してくれる。関数を評価した結果を取得するのに、IFormulaEvaluatorインターフェイスを使用する方法もある。evaluator.Evaluate(cell);CellValueインスタンスに関数の評価結果が入るので、プロパティから値を取得することが出来る。セルの値が空の場合は、CellValueインスタンスにnullが入るため、プロパティを参照すると例外が発生する。NullReferenceExceptionが発生CellValueクラスでは、関数の評価結果のデータ型とプロパティが異なっていても例外にはならない。関数を評価した結果のデータ型が、条件によって変わるセルの値を取得するICellインターフェイスのプロパティでは、関数の評価結果とプロパティの型が異なると例外が発生するため使えない。関数を評価した結果の型が条件によって変わる場合は、CellValueクラスを使用する。CellValueクラスのCellTypeプロパティにはデータ型が格納されているため、データ型で分岐して処理が出来る。cellValue.StringValue;}以上。09:00NPOIでExcelのセルの値を取得する(関数も対応)Tweet広告を非表示にするもっと読むコメントを書く2019-02-21jQueryのfloatTheadプラグインを使用したテーブルを印刷する方法jQuery少し前ですが、レコード数の多いテーブルを表示した時に、スクロールでExcelみたいに先頭行を固定して表示したい時に、jQueryのfloatTheadプラグインを使用しました。*1さらにfloatTheadプラグインを使用したテーブルを印刷したいという要件が出た時に、そのままでは印刷レイアウトが崩れてしまったので、対処方法を調べました。作者のGitHubのissueページに載っていました。画面表示に戻ったら再度table要素のfloatThead()を呼び出す。Vagrantこの間、Hyper-Vで仮想環境を構築しているので、せっかくだからVagrantも使ってみることにした。2.2.3実際にやってみたところ、特につまずく箇所もなく、起動に成功した。ファイアウォールの設定はしていないため、フォルダ共有が出来なかったくらい。既定のスイッチ周りはどうなるかが気になっていたが、接続しているようだ。行ったことをメモしておく。64-bitをダウンロードして実行した。テスト用のフォルダを作成して移動し、以下のコマンドを実行した。upを実行したフォルダに作られる.vagrantフォルダ以下に保存された。コマンドで停止したのも確認できた。初期設定では、個人フォルダ配下の.vagrant.dフォルダにBoxファイルが配置されるので、以下を参考にして配置場所を変更した。新年あけましておめでとうございます。今年もよろしくお願いします。権限関係では、いくつか記事を書いた。redwarrior.hateblo.jpredwarrior.hateblo.jp上記を参考にすれば、躓かずに構築できると思ってたが、あまり見たことのないエラーに遭遇したのでエラー内容と解決策を記録しておく。6.1.3設定や前提条件IIS上に複数サイトを作成して、ドメイン名によってサイトへの振り分けを行っているサイトではなくアプリケーションで、Windows認証を有効にしているアプリケーションプールはApplicationPollIdentityを使用。ログインできませんでした。このログインは信頼されていないドメインからのログインなので、統合認証では使用できません。Serverの再起動をしてもらったりしたが、変化なし。エラーメッセージで検索しても、めぼしい情報は見つからず。落ち着いて考えるとメッセージは、(権限による)アクセス許可の問題ではないと思いたち、今までと違う所を探した。すると、DBの接続文字列が違っていた。今まではサーバー名を設定していたが、今回はDNSに設定したドメイン名を使用していた。接続文字列をサーバ名に戻すと、エラーが発生しなくなった。Sourceにサーバー名を指定する。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。