2017/10/11(Wed) 14:01:48 編集(投稿者)
ソースコードにバグがあったため、修正しました。
返信が遅くなってしまい、申し訳ありません。
Hongliang様、kiku様 ご教示いただきありがとうございます。
今回は、kiku様の方法で実現しました。
以下にソースコードを貼り付けます。
当方、初心者なため、きれいなソースコードではないのは、
ご了承ください。
以上
------------------------------
class MyDataGridView : DataGridView
// プロパティ追加
private bool m_SortSelectHold = false; // ソート時に選択状態を保持
/// <summary>
/// ソート時に選択状態を保持
/// </summary>
[Category("追加")]
[Description("ソート時に選択状態を保持するか設定。")]
public bool SortSelectHold
{
get
{
return m_SortSelectHold;
}
set
{
m_SortSelectHold = value;
}
}
protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
{
List<string> listKey = new List<string>();
// ソートが実行される前にソートキーを退避
if (m_SortSelectHold)
{
foreach (DataGridViewRow row in SelectedRows)
{
listKey.Add(row.Cells[m_SortSelectHoldKeyCol].Value.ToString());
}
}
// ベースのイベント
base.OnColumnHeaderMouseClick(e);
//ソートが実行された後、退避したキーのレコードを選択
if (m_SortSelectHold)
{
bool bFirstFlg = true;
foreach (var sKey in listKey)
{
DataGridViewRow[] rows = (from DataGridViewRow x in Rows
where (string)x.Cells[列名].Value == sKey
select x).ToArray();
foreach (DataGridViewRow row in rows)
{
row.Selected = true;
if (bFirstFlg)
{
CurrentCell = this[0, row.Index];
bFirstFlg = false;
}
}
}
}
}