XtraGrid上的NullReferenceException Gridview rowclick事件(Filter行)

时间:2014-01-13 12:26:41

标签: c# datagridview filter devexpress

private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{              
   WriteUsersInformation((User)grdPersonel.MainView.GetRow(e.RowHandle));                        
}

我在gridview上使用过滤区域,因此如果用户单击过滤器区域“NullReferenceException未处理”,则会显示错误。我如何区分选择行数据流或过滤器,所以我想放一个控件。我非常喜欢编码,谢谢。

3 个答案:

答案 0 :(得分:0)

if (e.RowHandle < 0)
{
    //Invalid row
}  
else
{
    WriteUsersInformation((User)grdPersonel.MainView.GetRow(e.RowHandle));   
}

答案 1 :(得分:0)

我认为过滤区域是指自动过滤器行,如果是这样,您可以检查所选行句柄是否等于自动过滤器行句柄

if (e.RowHandle != DevExpress.XtraGrid.GridControl.AutoFilterRowHandle)
{
// your code
}

但我真的建议你写一个更安全的代码,只需检查你的用户对象是否为空。

private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
    var user = gridView1.GetRow(e.RowHandle) as User;
    if (user == null)
        return;

    WriteUsersInformation(user);
}

答案 2 :(得分:0)

 private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
    {

        object oUsr = grdPersonel.MainView.GetRow(e.RowHandle);
        if (oUsr is User)
            WriteUserInformation((User)oUsr);

       }

当最后一个用户点击自动过滤器行时,我的当前对象变为空,我再次使用此代码解决了所有答案。