C#DataGridView:为列

时间:2017-07-28 07:09:05

标签: c# sorting exception events datagridview

我已经创建了列并从数据库中检索了数据以填充DataGridView

我有一个CellEnter事件,可以触发并处理网格的选定行。但是,DataGridViewColumn也会触发CellEnter,当我单击列标题对数据进行排序时,程序会尝试处理它并抛出ArgumentOutOfRange异常。

如何禁用为列调用CellEnter?

1 个答案:

答案 0 :(得分:0)

我过去遇到过类似的情况。以下对我有用。

此示例说明如何避免您在myCellEnterEvent()中执行的处理导致另一次调用myCellEnterEvent的情况。如果您允许WasICalledBy()遍历整个堆栈,并且如果您为每个帧记录GetMethod().Name,您将看到导致您的事件被触发的所有各种情况,您可以对这些情况进行过滤具体情况以最恰当的方式适合您的具体情况。

private myCellEnterEvent( object sender, EventArgs e)
{
    if (WasICalledBy("myCellEnterEvent"))
        return;

    // do the things you really want to do here...
}

private bool WasICalledBy(string MethodName)
{
    bool MethodFound = false;
    int StartLevel = 2; // ignore this (WasICalledBy) method and ignore the method that called
                        // WasICalledBy(), so that the caller can determine if it resulted in a call to itself.

    StackTrace st = new StackTrace();
    for (int nFrame = StartLevel; nFrame < st.FrameCount; nFrame++)
    {
        if (st.GetFrame(nFrame).GetMethod().Name.ToUpper() == MethodName.ToUpper())
        {
            MethodFound = true;
            break;
        }
    }   
    return MethodFound;
}