2013-12-07 3 views
1

У меня есть отчет RDLC на C#, который отображает таблицу.Как динамически настроить ширину столбца таблицы в отчете RDLC

Я предоставляю пользователю возможность выбора необходимых столбцов для отображения в отчете.

Поэтому, когда количество столбцов в отчете уменьшается, половина страницы с правой стороны становится пустой, из-за чего представление отчета выглядит плохим.

Я хочу найти способ, с помощью которого я могу динамически установить размер столбца видимых столбцов.

ИЛИ

я могу изменить расположение таблицы так, чтобы таблица отображается в центре страницы.

До сих пор я обнаружил, что я не могу написать Expression или передать параметр установить размер или расположение элемента управления в RDLC отчет.

Я хотел бы знать, есть ли альтернативный способ достижения этого.

ответ

4

Что вы можете сделать, так это изменить rdlc во время выполнения, это просто и xml-файл, чтобы вы могли его разобрать и перейти к программной настройке ширины таблицы. Я использую этот подход для перевода своих отчетов на многоязычный язык, и он отлично работает.

Эта ссылка покажет вам, как перевести отчет, но этот код является хорошей отправной точкой. Я думаю, вы можете легко настроить его для своей цели. Change RDLC XML

2

Это может быть альтернативой:

  1. Сделать колонны небольшой
  2. Добавить группу строк
  3. В верхней строке группы, добавить изображение, которое будет использоваться для «PUSH» ширина Col обоих рядов в группе
  4. В свойствах изображения установите его для использования источника внешнего изображения и используйте параметр отчета, чтобы установить, какое изображение использовать
  5. На изображении установите «сохранить исходный размер»

Edit: Вы можете также создать такой «отступ изображения» динамически, чтобы различные ширины, например, в MVC:

public class ImageUtilController : Controller 
{ 
    public FileContentResult GenerateTransparentRectangle(int width, int height) 
    { 
     var image = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
     using (var g = Graphics.FromImage(image)) 
     { 
      g.Clear(Color.Transparent); 
      g.FillRectangle(new SolidBrush(Color.Transparent), 0, 0, width, height); 
     } 
     MemoryStream ms = new MemoryStream(); 
     image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
     return File(ms.ToArray(), "image/png"); 
    } 
} 
+0

хитрый способ сделать что-то! :) –

1

Для того, чтобы видимые столбцы расширяются и заполняют пространство без НДС (скрытый) столбцов, так что ширина отчета поддерживается, работа должна быть выполнена.

Файл rdlc - это XML-документ. Он определяет ширину столбцов, как указано в xml (Это относится к файлу RDLC, созданному с использованием Visual Studio 2005, может отличаться для другой версии). Ниже xml предлагает, чтобы в таблице было 6 столбцов.

<TableColumns> 
     <TableColumn> 
     <Width>0.5in</Width> 
     </TableColumn> 
     <TableColumn> 
     <Width>1.125in</Width> 
     </TableColumn> 
     <TableColumn> 
     <Width>1in</Width> 
     </TableColumn> 
     <TableColumn> 
     <Width>1in</Width> 
     </TableColumn> 
     <TableColumn> 
     <Width>0.5in</Width> 
     </TableColumn> 
     <TableColumn> 
     <Width>1.375in</Width> 
     </TableColumn> 
    </TableColumns> 

В принципе логика проста, просто увеличьте ширину видимых столбцов. Но для его реализации требуется несколько строк кода.

  1. Вычислить сумму ширины скрытых столбцов, а затем ширину пересчитывать видимых столбцов

    float[] resizedwidth; 
        // code for recalculation goes here 
    
  2. Читать весь отчет XML в строковую переменную 'rptxml'

    String rptxml = System.IO.File.ReadAllText(@"D:\SO\WinFormQ\WinFormQ\Report1.rdlc"); 
    
  3. Заменить выше сегмент xml с помощью модифицированного сегмента xml

    int start = rptxml.IndexOf("<TableColumns>"); 
        int end = rptxml.IndexOf("</TableColumns>") + "</TableColumns>".Length; 
        String resizedcolumns = String.format(
         "<TableColumns>" 
         + "<TableColumn><Width>{0}in</Width></TableColumn>" 
         + "<TableColumn><Width>{1}in</Width></TableColumn>" 
         + "<TableColumn><Width>{2}in</Width></TableColumn>" 
         + "<TableColumn><Width>{3}in</Width></TableColumn>" 
         + "<TableColumn><Width>{4}in</Width></TableColumn>" 
         + "<TableColumn><Width>{5}in</Width></TableColumn>" 
         + "</TableColumns>" 
         , resizedwidth[0], resizedwidth[1], resizedwidth[2], resizedwidth[3], resizedwidth[4], resizedwidth[5] 
         ); 
        rptxml = rptxml.Substring(0, start) + resizedcolumns + rptxml.Substring(end); 
    
  4. Создание TextReader из строки переменной '' rptxml

    TextReader tr = new StringReader(rptxml);    
    
  5. Использование LoadReportDefinition() метод, чтобы загрузить Модифицированный определение отчета

    reportViewer1.LocalReport.LoadReportDefinition(tr); 
    

ПРОДОЛЖИТЬ с указанием DataSources и ReportParameters т.д. и, наконец, отобразить отчет. ПРИМЕЧАНИЕ: Не забудьте закрыть TextReader tr.Close().

Смежные вопросы