2019/04/22(月)WebFormでDOMを扱う

ページ内にGridViewが複数あり、一番上のGridViewに表示されたセルのテキストをクリックすると、2番目、3番目のGridView内の同じテキストをハイライトしたい(テキストコピーしてCTRL+Fでページ内検索していたがコピーペーストが面倒)という非常にレアなシチュエーション。
WebFormでjQueryや他のライブラリ使うよりは直接DOMの配列ぐるぐる回した方が楽そう。
<script type="text/javascript">
    function highlightKeyword(keyword) {
        var tbls = document.getElementsByTagName("table");
        // 一番上のテーブルを除く全てのテーブルの全ての行の全てのセル内を置換
        for (var i = 1; i < tbls.length; i++) {
            for (var j = 1; j < tbls[i].rows.length; j++) {
                for (var k = 0; k < tbls[i].rows[j].cells.length; k++) {
                    var str = tbls[i].rows[j].cells[k].innerHTML;
                    // 既にタグが付いてるかも知れないので削除してから追加
                    tbls[i].rows[j].cells[k].innerHTML = str.replace('<span style="background: yellow;">', '').replace('</span>', '').replace(keyword, '<span style="background: yellow;">' + keyword + '</span>');
                }
            }
        }
    }
</script>

2019/04/14(日)ASP.NET WebFormのMenuコントロール その3

WebFormのテストプロジェクトに過去に試したものも統合しておこうとMenuコントロールを追加したら、Bootstrapのバージョン上げた(4.3.1)ためにデザインが崩れてまたやり直し…。

ここまでは順調
menucontrol.png


幅を寄せるをなぜかトグルボタンの位置がずれる
menucontrol2.png


メニューを開くと正常な位置に
menucontrol3.png


なんとなくあと一息、と言う感じだったのでメニューコントロール使わない正常パターンと使った時のずれるパターンでソースを見比べながら頑張りましたが違いが見つけ出せず。

menuコントロールの一番外側がdivになっていたので、CssClassプロパティにcollapse navbar-collapseをセットしていたのですがそれをやめ、divタグで囲んだらちゃんと表示されるようになりまた。
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
    <a class="navbar-brand" runat="server" href="~/">テスト用</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbar">
        <asp:Menu ID="mainmenu" DataSourceID="SiteMapDataSource1"
            runat="server" 
            Orientation="Horizontal" 
            StaticDisplayLevels="2"
            StaticEnableDefaultPopOutImage="False"
            MaximumDynamicDisplayLevels="10" 
            EnableViewState="false"
            StaticMenuStyle-CssClass="navbar-nav mr-auto" 
            StaticSelectedStyle-CssClass="active"
            DynamicMenuStyle-CssClass="dropdown-menu" 
            IncludeStyleBlock="false" 
            SkipLinkText=""
            RenderingMode="List"
            StaticMenuItemStyle-CssClass="nav-link"
            DynamicMenuItemStyle-CssClass="dropdown-item">
        </asp:Menu>
    </div>
</nav>

2019/04/13(土)既存のプロジェクトをGitHubにあげる

一度やったはずなのにまた躓く…。
既にGitHub側もVisual Studio側も環境は整っている場合の手順のおさらい。

下準備

  • Visual Studioでプロジェクトを作成
  • ソース管理(ローカルリポジトリ)に追加しておく
  • GitHubでプロジェクト名と同じ名前のリポジトリを作成(ReadMeは追加しない)

GitHubで作成したリポジトリのアドレスをコピー

20190412002.png

Visual Studioのリポジトリの設定でリモートを追加

20190412001.png

20190412003.png

20190412004.png

20190412005.png


保存すれば後はいつもの作業…のはずが今回はおまけが…。
同期してプッシュしたらセキュリティの警告が表示されました。
20190412006.png


WebFormの新規プロジェクトで作成したばかりでほとんど修正していないのに何故?と思い確認したら、bootstrapのバージョンが脆弱性含んだものになっていたようです。
20190412007.png

Nugetで何も考えずに更新かけたら3.4.1に上げたつもりが4.3.1にあがってしまい、デザインの微調整が必要になりました。

2019/04/04(木)科目別集計

Excelが苦手なのでC#で決算書を作成しようと初のWPFアプリに挑戦していましたが、間に合わず、結局こちらも初めてのExcel VBAで関数つくりました。
ちょっとダサいけれどエクセルファイル無くした時用にメモっておきます。

初めての標準モジュール作成

' 収入専用
Function 科目別収入集計(科目)
    Dim rowsData As Long '行数カウント用の変数
    rowsData = Worksheets("現金出納帳").Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得
    'Debug.Print rowsData
    Dim total As Long
    Dim i As Long
    For i = 5 To rowsData
       If Worksheets("現金出納帳").Cells(i, 3).Value = 科目 Then
            lineVal = Worksheets("現金出納帳").Cells(i, 5).Value
            'Debug.Print Worksheets("現金出納帳").Cells(i, 5).Value
            total = total + lineVal
       End If
    Next i
    'Debug.Print total
    科目別収入集計 = total
End Function

' 支出専用
Function 科目別支出集計(科目)
    Dim rowsData As Long
    rowsData = Worksheets("現金出納帳").Cells(Rows.Count, 1).End(xlUp).Row
    Dim total As Long
    Dim i As Long
    For i = 5 To rowsData
       If Worksheets("現金出納帳").Cells(i, 3).Value = 科目 Then
            lineVal = Worksheets("現金出納帳").Cells(i, 6).Value
            total = total + lineVal
       End If
    Next i
    科目別支出集計 = total
End Function

使い方

パラメータを増やせば関数は一つで済みますが列が間違ってないか不安になり確認する回数が増えそうなので、使いやすさ優先です。

収入の例

=科目別収入集計("雑収入")

支出の例

=科目別支出集計("雑費")

2019/04/01(月)Blazor 0.9.0

Blazorの新規プロジェクトを作ろうとしたらビルド失敗。
「コード -2147450730 で終了しました」という見たことの有るような無いようなエラー。
前回苦労した時は英語だったのが日本語になっていました。SDKが気に入らない時のエラーのようです。
確認したら3月にBlazor 0.9.0が出ていました。
SDKを入れなおすと直りそうですが、今度は現在動いている方のプロジェクトをUpgradeする必要ありそうです。
正式リリースまで待とうかな…。
OK キャンセル 確認 その他