DataGridView中的CellClick事件和SelectionChanged事件

时间:2011-10-25 01:20:16

标签: c# winforms events datagridview

Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件有什么区别?

当确切选择更改事件时:在表单加载事件之前或之后?

1 个答案:

答案 0 :(得分:6)

此类问题的最佳参考是MSDN DataGridView文档。

对于CellClick事件,他们说:

  

单击单元格的任何部分(包括)时会发生此事件   边框和填充。当用户按下并释放时也会发生这种情况   按钮单元格或复选框单元格具有焦点时的SPACE键,和   如果单击单元格,则会对这些单元格类型出现两次   按空格键。

对于SelectionChanged事件:

  

每当选择单元格或选择单元格时,都会发生此事件   取消,无论是以编程方式还是通过用户操作。例如,   当您想要显示当前的总和时,此事件非常有用   选定的细胞。

明显不同的是,即使DataGridView选择没有改变,CellClick也可以触发,例如右键单击或单击当前选定的单元格。此外,选择可以在不单击单元格的情况下更改,例如,当您以编程方式更改选择时。

至于什么时候选择更改事件是相对于表单加载事件运行的,当它在表单构造函数中附加时,它就在之前(并且在那几次!)。

我刚用以下代码证明了这一点:

public Form1()
{
    InitializeComponent();

    MyBindingList<BackingObject> backing_objects = new MyBindingList<BackingObject>();
    backing_objects.Add(new BackingObject{ PrimaryKey = 1, Name  = "Fred", Hidden = "Fred 1"});          

    dataGridView1.DataSource = backing_objects;

    this.Load += new EventHandler(Form1_Load);
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}

void Form1_Load(object sender, EventArgs e)
{
    Console.WriteLine("Load");
}

void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    Console.WriteLine("Selection Changed");            
}

输出窗口显示:

Selection Changed
Selection Changed
Selection Changed
Load

请注意,您可以通过在DataBindingComplete事件处理程序中附加

来在加载事件后更改选项。
dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}

现在在输出窗口中,您只看到:

Load

在更改网格选择(例如单击单元格)之前,没有选择更改输出