未分類

【C# DataGridView】セルを読み取り専用にする (Cell_Lock)

準備

(なし)

デザイン

1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にデータグリッドビュー (dataGridView1) を配置します。

サンプルコード (C#)

// 名前空間の追加
// (なし)

// コード
private void Form1_Load(object sender, EventArgs e)
{
  dataGridView1.ColumnCount = 2;
  dataGridView1.Rows.Add(new string[] { "A001", "Apple" });
  dataGridView1.Rows.Add(new string[] { "B001", "Orange" });
  dataGridView1.Rows.Add(new string[] { "C001", "Grape" });
  dataGridView1.Rows.Add(new string[] { "D001", "Banana" });
  dataGridView1.Rows.Add(new string[] { "E001", "Lemon" });
}

private void button1_Click(object sender, EventArgs e)
{
  Cell_Lock(dataGridView1, 0);
}

private void Cell_Lock(DataGridView dgvTarget, int iColPos)
{
  var rows = dgvTarget.Rows.Cast<DataGridViewRow>().AsEnumerable().
    Where(row => (row.Cells[iColPos].Value ?? "").ToString().Trim() != "");

  foreach (DataGridViewRow row in rows)
  {
    row.Cells[iColPos].ReadOnly = true;
    row.Cells[iColPos].Style.ForeColor = Color.Gray;
  }
}

解説

データグリッドビューの行データを IEnumerable 型に変換します。その際、未入力のセルは対象外とします。新規追加業は入力可能となっています。

結果

動作確認環境

Visual Studio 2015 Professional (C# 6.0)

-未分類