データグリッドに表示されたデータを複数選択して削除する処理のメモです。
private void OnDeleteButtonClick()
{
List target = getCheckedNos();
if (target.Count() < 0)
{
this.ShowNotSelectedDeleteLineMessage(); // エラーメッセージ
return;
}
if (this.ShowDeleteConfirmMessage() == System.Windows.Forms.DialogResult.OK)
{
try
{
// 砂時計に変更
Cursor.Current = Cursors.WaitCursor;
int currentRowIndex = dataGridViewList.CurrentRow.Index;
using (var context = new HyoteiSystemContext())
{
var q = from m_hyoutei m in context.m_hyoutei
where target.Contains(m.student_id)
select m;
if (q.Count() <= 0)
{
this.ShowErrorMessage("選択されたデータが存在しない為、削除出来ませんでした。");
return;
}
else
{
foreach (var row in q)
{
context.m_hyoutei.DeleteObject(row);
}
context.SaveChanges();
}
}
// 削除後に検索と表示を再びしてる(あんま関係ないし意味ないけどついでに置いとく)
this.OnSearchButtonClick();
this.dataGridViewList.ReselectDataGridViewRow(currentRowIndex);
}
catch (Exception)
{
this.ShowErrorMessage("削除に失敗しました。");
return;
}
}
}
private List getCheckedNos()
{
List nos = new List();
foreach (DataGridViewRow row in this.dataGridViewList.Rows)
{
// "select"ってのがチェックボックスカラム
// チェックされていないとValueはnullになっちゃうので二段階層
// "&"一個でできると思ったんだけどなあ…。
if (null != row.Cells["select"].Value)
{
if (int.Parse(row.Cells["select"].Value.ToString()) == 1)
{
// 選択された生徒IDをじゃんじゃか追加
nos.Add((int)row.Cells["student_id"].Value);
}
}
}
return nos;
}
初めてSyntaxHighlighterを使ってみたけど、あんまり上手くいってないなあ。
インデントがきつい…w
最初VisualStudioからコピペしたら、えらい空白空いてたんで、全角スペースでがんばった。
けど、見づらいね。
全角スペース2個分が良いかも。今日はもう疲れたのでこれでいく。
それにしても見辛い。
テンプレの所為かな。もっと全画面使えるテンプレがほしいんだけど…。
また探しておきます。
ソースコードの最後にintが四つ並べてあるんだけど、これは勝手に入ってるものです。謎。何これ。