не может неявно преобразовать тип 'system.reflection.fieldinfo' в 'devexpress.dataaccess.excel.fieldinfo' - PullRequest
0 голосов
/ 25 марта 2019

Изображение ошибки

спасибо всем заранее ... Я использую 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();
}

1 Ответ

1 голос
/ 25 марта 2019

Типы отражения и DevExpress FieldInfo не связаны и, следовательно, не совместимы по назначению.Создайте новый объект и присвойте ему значения

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 не задокументирован и может быть изменен

Этот класс не задокументирован, поскольку он описывает представление внутренней визуальной сетки, которое можетдинамически изменяться в зависимости от требований разработки.Мы стремимся помешать нашим клиентам использовать этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...