動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

Sortの方向と矢印が消える

出典: C# DataGridView の DataSource を後から変更する全パターンハマりポイント:列の制御が効いた後で踏むやつ / Sortの方向と矢印が消える

Sortの方向と矢印が消える (csharp)#4d6ed38713ec
// 並び順を保持して差し替える
var sortedCol = dgv.SortedColumn?.Name;
var sortDir = dgv.SortOrder;
 
dgv.DataSource = null;
dgv.DataSource = newDt;
 
if (sortedCol != null && sortDir != SortOrder.None)
{
    var dir = sortDir == SortOrder.Ascending
        ? ListSortDirection.Ascending
        : ListSortDirection.Descending;
    dgv.Sort(dgv.Columns[sortedCol], dir);
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #4d6ed38713ec
  • lines: 14
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「ハマりポイント:列の制御が効いた後で踏むやつ / Sortの方向と矢印が消える」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

8
C#
// NGパターン:AutoGenerateColumns=true のまま差し替える
dgv.DataSource = dt1;  // 列が3個(ID/名前/金額)追加される
dgv.DataSource = dt2;  // 列がさらに3個(ID/コード/数量)追加される ← 重複や増殖
未収録

パターン1: AutoGenerateColumnsがtrueのまま差し替え

#688465b5fdca
C#
// NGパターン:null を挟まない
dgv.DataSource = dt1;
// (ユーザーが操作)
dgv.DataSource = dt2;  // 前の選択行・ソート状態を引きずる
未収録

パターン2: DataSource = nullを挟まずに直接置き換え

#78d4c57559d1
C#
// NGパターン:DataSource バインド中に Columns.Clear()
dgv.DataSource = dt1;
dgv.Columns.Clear();  // System.InvalidOperationException
未収録

パターン3: Columns.Clear()を呼ぶタイミングを間違えている

#ae04c8396101
C#
// Form_Load などの初期化時に1回だけ
dgv.AutoGenerateColumns = false;

// デザイナで作っておいた列の DataPropertyName を DataTable のカラム名と合わせる
未収録

パターン1: AutoGenerateColumnsを切って手動で列定義する(推奨)

#ec3ad2300ef3
C#
// フィールドとして1個持っておく
private readonly BindingSource _bs = new BindingSource();

// 初期化時
未収録

パターン2: BindingSourceを間に挟む

#0efb9f7de32a
C#
private void SwitchToInventory(DataTable dt)
{
    dgv.DataSource = null;
    dgv.Columns.Clear();
未収録

パターン3:列を完全に作り直す(複数の異なるテーブルを切り替えたい時)

#d9e99220a5de
図鑑トップ