не удается неявно преобразовать тип ‘system.reflection.fieldinfo’ в ‘devexpress.dataaccess.excel.fieldinfo’

#c# #devexpress

#c# #devexpress

Вопрос:

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

заранее всем спасибо…. я использую 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. Почему вы используете DevExpress. Доступ к данным. Excel. FieldInfo с помощью GridView? Откуда вы взяли этот код? Похоже, вы, возможно, скопировали какой-то код из Центра поддержки DevExpress, но неправильно использовали Excel. FieldInfo в сравнении с системой. Отражение. FieldInfo. Я предполагаю, что скопированный вами код не полностью определил пространство имен FieldInfo и вместо этого использовал System . Директива отражения, которую вы не включили. Затем вы неправильно полностью определили его с помощью DevExpress.Data.Excel, а не System. Отражение.

Ответ №1:

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

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

Комментарии:

1. спасибо, сэр, ошибка устранена, но элемент управления grid не прокручивается в соответствии со строками в нем

2. Создайте заявку на сайте поддержки DevExpress для вопросов, связанных с их продуктами.