Assertion Failed! -7ページ目

[C#][DataGridView]チェックボックス付列の追加

チェックボックス付の列をDataGridViewに追加する


DataGridViewCheckBoxColumnクラスのオブジェクトをDataGridViewに追加する


private void Form1_Load(object sender, EventArgs e)
{
  DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();

  // 三項のチェックボックスにするには、ThreeStateプロパティをtrueにする

  column.ThreeState = true;
column.Name= "CheckBox";
  dataGridView1.Columns.Add(column);

}


チェックボックスの状態の変化を取得する


チェックボックスの状態の変化は、DataGridViewのCellValueChangedイベントで取得する。

イベントが飛んでくるタイミングは、チェック状態の変更後、フォーカスが外れたタイミングとなる。


チェック時即座にイベントを飛ばすためには、CurrentCellDirtyStateChangedイベントを

ハンドルし、編集をコミットさせればよい。

参考サイト


private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{

  if (dataGridView1.Columns["CheckBox"].Equals(dataGridView1.Columns[e.ColumnIndex]))
  {
    CheckState state = (CheckState)dataGridView1.Rows[e.RowIndex].Cells["CheckBox"].Value;

    MessageBox.Show(state.ToString());

  }

}


[C#][DataGridView]行の高さを固定する

行の高さを固定する


// DataGridViewTriStateのenumを変更する。

dataGridView1.RowTemplate.Resizable = DataGridViewTriState.False;

[C#][DataGridView]指定の行・列を固定する

指定の行・列を固定する


Excelの「セル固定」と同様な処理をするために、Frozenプロパティにtrueを設定する。

// 列を固定する
dataGridView1.Columns[0].Frozen = true;

// 行を固定する
dataGridView1.Rows[0].Frozen = true;

[C#][DataGridView]指定した行をソート対象外にする

指定した行をソートの対象外にする。

SortCompareイベントをハンドルする。

/// SortCompare
private void dataGridView1_SortCompare(object sender, DataGridViiewSortCompareEventArgs e)
{
  // rowIndex:ソート対象外とする行インデックス
  int rowIndex = 0;
  if ((rowIndex == e.RowIndex1) || (rowIndex == e.RowIndex2))
  {
    e.Handled = true;
  }
}


[C#]DataGridViewのちらつき防止2

DataGridViewのちらつきを防止する②


ブログを書いてお小遣い稼ぎ


前回 からの続き。


有効にするための方法2

Reflectionを利用する。


以下のように、リフレクションを使用することでも解消できる。

やっていることはDoubleBufferedプロパティを有効にするということで同じ。


using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      Type type = typeof(DataGridView);


      System.Reflection.PropertyInfo propInfo =

        type.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance |

        System.Reflection.BindingFlags.NonPublic);


      propInfo.SetValue(dataGridView1, true, null);
    }
  }
}