首页 > 解决方案 > 无法将类型“system.reflection.fieldinfo”隐式转换为“devexpress.dataaccess.excel.fieldinfo”

问题描述

错误图像

在此先感谢大家....我正在使用 devexpress xtragridcontrol 根据行高显示数据。但问题是,不能将类型 system.reflection.fieldinfo 隐式转换为 devexpress.dataaccess.excel.fieldinfo,任何建议...

这是我的代码

private void UpdateGridSize()
{
    GridViewInfo viewInfo = (GridViewInfo)gridView2.GetViewInfo();
    DevExpress.DataAccess.Excel.FieldInfo fi = typeof(GridView).GetField("scrollInfo", BindingFlags.Instance | BindingFlags.NonPublic);
    ScrollInfo scrollInfo = (ScrollInfo)fi.GetValue(gridView2);
    int width = viewInfo.ViewRects.IndicatorWidth;
    foreach (GridColumn column in gridView1.VisibleColumns)
    {
        if (viewInfo.GetColumnLeftCoord(column) < viewInfo.ViewRects.ColumnPanelWidth)
            gridView1.LeftCoord = width;
        width += viewInfo.ColumnsInfo[column].Bounds.Width;
    }
    if (scrollInfo.VScrollVisible) width += scrollInfo.VScrollSize;
    int height = viewInfo.CalcRealViewHeight(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height), true);
    if (scrollInfo.HScrollVisible) height += scrollInfo.HScrollSize;
    width = Math.Max(GridMinWidth, width);
    width = Math.Min(ClientSize.Width - gridControl1.Location.X, width);
    height = Math.Max(GridMinHeight, height);
    height = Math.Min(ClientSize.Height - gridControl1.Location.Y, height);
    gridControl1.Size = new Size(width, height);
    gridView1.LayoutChanged();
}

标签: c#devexpress

解决方案


反射和 DevExpressFieldInfo类型不相关,因此不兼容赋值。创建一个新对象并分配值

var fieldInfo = typeof(GridView).GetField("scrollInfo",
    BindingFlags.Instance | BindingFlags.NonPublic); // Reflection

var fi = new DevExpress.DataAccess.Excel.FieldInfo {
    Name = fieldInfo.Name, Type = fieldInfo.MemberType
};

或者你的意思是做这样的事情:

viewInfo.GetField(...)

代替

typeof(GridView).GetField(

根据 DevExpress的说法,该课程GridViewInfo没有记录在案并且可能会发生变化

这个类没有文档化,因为它描述了内部可视化网格表示,可以根据开发需求动态改变。我们倾向于阻止我们的客户使用这个类。


推荐阅读