DataGridViewの初期設定でColumnの順番が思う通りにいかない
お世話になります。
VS2019Community VC#のフレームワーク4.5です。
DataGridViewに、カラムをコード上で初期化しようとコードを書いているのですが、
並ぶ順番が思う通りにいかずに悩んでいます。
DataGridViewのColumnsにAddしていけば、Addした順に左から並ぶはずなのですが、
Addの際にifで条件分岐すると、順番が末尾に来てしまいます。
以下が、そのコード部分です。
// 継承元
protected DataGridViewButtonColumn status
= new DataGridViewButtonColumn()
{
Name = "状態",
Width = 200,
};
public virtual void set(bool editable)
{
this.dgv.Columns.Clear();
string[] stDefines = {
"No_204","営_60","StaffNo_110","氏名_210","担当者名_120","開始_145","終了_145"
};
foreach (string s in stDefines)
{
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = s.Substring(0, s.IndexOf("_"));
col.Name = "col" + s.Substring(0, s.IndexOf("_"));
col.ReadOnly = true;
col.Width = int.Parse(s.Substring(s.IndexOf("_") + 1));
this.dgv.Columns.Add(col);
}
if(editable)
{
// 末尾に『状態』ボタンを追加する
this.dgv.Columns.Add(this.status);
}
}
// 継承先
private DataGridViewButtonColumn detail = new DataGridViewButtonColumn()
{
Name = "詳細",
Width = 80,
};
public override void set(bool editable)
{
// this.dgvはDataGridViewです。
this.dgv.Columns.Clear();
string[] stDefines = {
"No_204","営_60","企業名 & 部門名_320","担当者名_120","開始_145","終了_145",
};
foreach (string s in stDefines)
{
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = s.Substring(0, s.IndexOf("_"));
col.Name = "col" + s.Substring(0, s.IndexOf("_"));
col.ReadOnly = true;
col.Width = int.Parse(s.Substring(s.IndexOf("_") + 1));
this.dgv.Columns.Add(col);
}
// ここです!
if (editable)
{
this.dgv.Columns.Add(this.status);
}
this.dgv.Columns.Add(this.detail);
}
引数editableにtrueを渡してやることで、『状態』ボタンのColumnを追加する流れです。
しかし、いろいろ試してのですが、どうしても後に追加しているdetailが最初に来てしまい、
ifで追加しているはずのstatusがdetailの右側に来てしまいます。
順番通りであれば、statusの次にdetailが来るはずなのですが…。
ちなみに、ifを除いて必ずstatusが入る処理にすれば、正しく順番通りになります。
原因と対策をお教えいただけますでしょうか。
よろしくお願いいたします。