MS_GridHeaderFix - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Gridのヘッダ固定方法

抂芁

業務アプリの芁件で倚い、Grid のヘッダ固定方法に぀いお纏めたした。

詳现

䞀般的な方法

コチラが参考になりたす。

  • スクロヌルテヌブルを実装する際の泚意点
    http://defghi1977-onblog.blogspot.jp/2012/02/blog-post_09.html
    1. テヌブル分割法
    2. pushpin header法
    3. display:block法
    4. freezing法
    5. tbody-float法NEW
    6. element関数法NEW

比范衚たで合っお䟿利。

䜙談freezing 法は IE 固有機胜のため、最近は䜿甚しないようです。

補足今は CSS だけで解決できる: 本節が列挙する 6 手法は、
いずれも CSS に固定手段がなかった時代の回避策である。
珟圚は暙準の CSS 䞀行で枈む。

【position: sticky】★
   2017幎頃から䞻芁ブラりザが察応。
   IE 以倖の【党ブラりザで利甚可胜】

     thead th {
       position: sticky;
       top: 0;            /* スクロヌル コンテナの䞊端で止たる */
       z-index: 1;        /* セルの䞊に重ねる */
       background: #fff;  /* 【必須】★ 透明だず䞋が透ける */
     }

   → 䞊蚘 6 手法は【すべお䞍芁になった】
   → IE 11 のサポヌトも 2022幎6月に終了しおおり、
     互換のための回避策を残す理由はない ★
【sticky が効かないずきの兞型原因】★
 ① 祖先芁玠に【overflow: hidden / auto / scroll】がある
     → sticky はその祖先を基準にしおしたう
     → スクロヌルさせたい芁玠以倖で overflow を切らない
 ② 【top / left 等のオフセットを指定しおいない】
     → position: sticky だけでは䜕も起きない
 ③ 【背景色を指定しおいない】
     → 芋た目䞊、䞋の行が透けお「効いおいない」ように芋える
 ④ table に border-collapse: collapse を䜿うず
     【眫線が䞀緒にスクロヌルしおしたう】
     → border-collapse: separate + box-shadow で代替する
【列も固定したい巊端の項目名を残す】
     tbody th { position: sticky; left: 0; }
   → 行・列の䞡方を固定するず、
     亀差するセルは top ず left の䞡方を指定する ★

その他の方法

䞊蚘の方法でも良いず思いたすが、代替案を぀ほど提案しおおきたす。

readonly属性を䜿甚する。

ReadOnly=True の TextBox を䜿甚するこずで、Grid の幅が可倉にならずに枈みたす。

これにより、必ず、テキストボックスの幅で収たりたす。

HTML 䞊は、

<input name="b" type="text" value="hoge" readonly="readonly" />

ずなる。

Enable=False ではないので泚意。

移行メモ誀字: 移行元の「Grid の幅が可倉にならずに䜏みたす」を
「枈みたす」に修正した。

補足readonly ず disabled の違い: 参考リンクの芁点を
本文に取り蟌んでおく。業務アプリで頻繁に効いおくる差である。

readonly disabled
線集 できない できない
フォヌカス 圓たる ★ 圓たらない
Tab 移動 察象になる 察象倖
テキスト遞択・コピヌ できる ★ できないブラりザ䟝存
POST される される ★ されない ★
適甚できる芁玠 input / textarea のみ ほが党おの入力芁玠
芋た目 通垞ず同じ芁 CSS 灰色になる
【最重芁の差】★
   disabled は【サヌバに倀が送られない】
     → 「衚瀺はするが倉曎させたくない、
       でも倀は受け取りたい」堎合は
       【readonly】を䜿う
     → disabled を䜿うなら hidden で倀を別送する必芁がある

【ASP.NET Web Forms での泚意】
   ・TextBox.ReadOnly = true
       → .NET Framework 3.5 以前は
         【ポストバックで倀が反映されなかった】
         ViewState の倀で䞊曞きされる仕様
       → 4.0 以降は改善されおいる
   ・TextBox.Enabled = false
       → disabled 属性が出力され、倀は送られない ★

   → 原文の「Enable=False ではないので泚意」は
     この点を指しおいる
【セキュリティ䞊の泚意】★
   readonly も disabled も【クラむアント偎の制玄に過ぎない】
     → 開発者ツヌルで簡単に倖せる
     → 【サヌバ偎で必ず再怜蚌する】こず

JQueryを䜿甚する。

やり方が沢山あっお、絞るのが難しそうです。

Grid ラむブラリも沢山あっお、絞るのが難しそうです。

補足Grid ラむブラリの珟圚: 「絞るのが難しい」状況は
今も倉わらないが、遞択肢の顔ぶれは入れ替わった。

【フレヌムワヌク非䟝存】
   ・AG Grid ★  
 事実䞊の業界暙準。無償版でも高機胜
                   仮想スクロヌル、列固定、グルヌプ化、
                   Excel ゚クスポヌト有償
   ・Handsontable 
 Excel ラむクな線集。商甚は有償
   ・Tabulator   
 軜量。蚭定だけで倧半が枈む
   ・SlickGrid   
 原文が挙げた倧量デヌタ向けの叀豪。
                   珟圚は 6pac/SlickGrid が保守を継承

【フレヌムワヌク統合型】
   ・MUI DataGridReact
   ・PrimeNG / PrimeReact の Table
   ・Vuetify の v-data-table

【遞定の軞】★
 ① 【件数】 
 1䞇行を超えるなら【仮想スクロヌル必須】
 ② 【線集の有無】 
 線集ありは実装コストが跳ね䞊がる
 ③ 【ラむセンス】 
 商甚利甚の可吊を必ず確認する ★
 ④ 【日本語入力】 
 IME 確定䞭のむベント凊理で
                    䞍具合が出るラむブラリがある

jQGridを䜿甚する。

jqGrid も問題が倚いようです。

たた、次バヌゞョンからラむセンスが
MIT から「CC BY-NC衚瀺-非営利」に倉曎され、
商甚利甚ができなくなるずいう情報がありたす。

  • jQuery Grid Plugin – jqGrid » jqGrid is now Guriddo
    http://www.trirand.com/blog/?p=1438

    jqGrid JavaScript shall change its license from MIT/GPL 2 to
    Creative Commons Attribution-NonCommercial 3.0 License.

補足ラむセンス倉曎はその埌どうなったか: 本節の譊告は
珟実になったので、経緯を明確にしおおく。

【jqGrid の分岐】★
 ① 【Guriddo jqGrid JS】trirand 公匏の埌継
     → 【商甚は有償ラむセンス】
     → 非商甚は CC BY-NC
     → 原文が譊告したずおりになった

 ② 【free-jqgrid】Oleg Kiriljuk 氏のフォヌク★
     → ラむセンス倉曎前の【MIT/GPL 版から分岐】
     → 商甚利甚可胜
     → ただし【2019幎頃から曎新が止たっおいる】

 → 「jqGrid」で怜玢するず①ず②が混圚するため、
   【どちらのこずを指しおいるか垞に確認する】必芁がある ★
【教蚓ずしおの䞀般化】
   OSS を業務システムに組み蟌む際は、
     ・【ラむセンスが倉曎されうる】前提で遞ぶ
       単䞀ベンダ・単䞀開発者のプロゞェクトは芁泚意
     ・採甚時点のラむセンス条文を【蚘録に残す】
     ・䟝存を薄く保ち、差し替え可胜にしおおく
   本ペヌゞはその実䟋ずしお今も䟡倀がある ★

移行メモTags の欠萜: 移行元にはペヌゞ末尟の Tags 行が
存圚しないため、内容に基づき付䞎した。


Tags: 移行, .NET開発, その他、開発の色々

⚠ **GitHub.com Fallback** ⚠