Использование Checkedlistbox в динамической таблице Manualbuild
Здравствуйте!
Использую вместе с динамической таблицей
Создал CheckedListBox, добавил названия колонок в список
И в итоге при нажатии ОК, хотел чтобы остались только колонки из списка, отмеченные галочкой, но в итоге выдаёт
"Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции"
Но даже убрав такую ошибку натыкаюсь еще на что-то
Так я обрабатываю нажатие на ОК
private void btnOk_Click(object sender, EventArgs e)
{
for (int i = 0; i < CheckedListBox1.Items.Count; i++)
{
if (!CheckedListBox1.CheckedListBox.GetItemChecked(i))
{
Table1.Columns.Width = 0;
}
Если использовать if (checkedListBox1.GetItemChecked(i)) , выходит ошибка , что нет определения GetItemChecked
Помогите, пожалуйста!
Полный текст приложил, а файл отчета, к сожалению, не прикрепляется
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using FastReport;
using FastReport.Data;
using FastReport.Dialog;
using FastReport.Barcode;
using FastReport.Table;
using FastReport.Utils;
namespace FastReport
{
public class ReportScript
{
private DataSet FDataSet;
private void RegisterData(Report FReport)
{
FReport.RegisterData(FDataSet, "Items");
// activate all data sources by default
foreach (DataSourceBase source in FReport.Dictionary.DataSources)
{
source.Enabled = true;
}
}
/* private void CheckedListBox1_Click(object sender, EventArgs e)
{
if (CheckedListBox1.CheckOnClick == true)
(Cell7.Visible) = false;
(Cell7.Width) = 0;
(Text3.Visible) = false;
(Text3.Width) = 0;
*/
private void btnOk_Click(object sender, EventArgs e)
{
for (int i = 0; i < CheckedListBox1.Items.Count; i++)
{
if (!CheckedListBox1.CheckedListBox.GetItemChecked(i))
{
Table1.Columns.Width = 0;
}
}
}
private void Table1_ManualBuild(object sender, EventArgs e)
{
DataSourceBase rep_grow = Report.GetDataSource("Items");
// Инициализировать
rep_grow.Init();
// Получить количество столбцов из источника данных
int colCount = rep_grow.Columns.Count;
// Получить заголовок таблицы, который содержит заголовки столбцов. Это строка с индексом = 0.
Table1.PrintRow(0);
for (int i = 0; i < colCount; i++)
{
// Загрузить названия колонок из источника
Cell1.Text = rep_grow.Columns.Alias;
// print it
Table1.PrintColumn(0);
}
//Выдать строки из источника данных
while (rep_grow.HasMoreRows)
{
// Получить тело таблицы
Table1.PrintRow(1);
for (int i = 0; i < colCount; i++)
{
// Заполнить ячейки из источника данных
Cell2.Text = rep_grow[rep_grow.Columns].ToString();
// Выдать
Table1.PrintColumn(0);
}
// Перейти к следующей строке
rep_grow.Next();
}
// AfterCalcBounds event is fired after calculating table bounds, just before
// printing the table. We will use it to correct the column's width.
Table1.ResultTable.AfterCalcBounds += new EventHandler(ResultTable_AfterCalcBounds);
}
private void ResultTable_AfterCalcBounds(object sender, EventArgs e)
{
TableResult resultTable = sender as TableResult;
float tableWidth = resultTable.Width;
float pageWidth = Engine.PageWidth;
if (tableWidth > pageWidth)
{
// установка ширины
float ratio = pageWidth / tableWidth;
foreach (TableColumn column in resultTable.Columns)
{
column.AutoSize = false;
column.Width *= ratio;
}
// РАссчитывается высота
resultTable.CalcHeight();
}
}
}
}
Использую вместе с динамической таблицей
Создал CheckedListBox, добавил названия колонок в список
И в итоге при нажатии ОК, хотел чтобы остались только колонки из списка, отмеченные галочкой, но в итоге выдаёт
"Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции"
Но даже убрав такую ошибку натыкаюсь еще на что-то
Так я обрабатываю нажатие на ОК
private void btnOk_Click(object sender, EventArgs e)
{
for (int i = 0; i < CheckedListBox1.Items.Count; i++)
{
if (!CheckedListBox1.CheckedListBox.GetItemChecked(i))
{
Table1.Columns.Width = 0;
}
Если использовать if (checkedListBox1.GetItemChecked(i)) , выходит ошибка , что нет определения GetItemChecked
Помогите, пожалуйста!
Полный текст приложил, а файл отчета, к сожалению, не прикрепляется
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using FastReport;
using FastReport.Data;
using FastReport.Dialog;
using FastReport.Barcode;
using FastReport.Table;
using FastReport.Utils;
namespace FastReport
{
public class ReportScript
{
private DataSet FDataSet;
private void RegisterData(Report FReport)
{
FReport.RegisterData(FDataSet, "Items");
// activate all data sources by default
foreach (DataSourceBase source in FReport.Dictionary.DataSources)
{
source.Enabled = true;
}
}
/* private void CheckedListBox1_Click(object sender, EventArgs e)
{
if (CheckedListBox1.CheckOnClick == true)
(Cell7.Visible) = false;
(Cell7.Width) = 0;
(Text3.Visible) = false;
(Text3.Width) = 0;
*/
private void btnOk_Click(object sender, EventArgs e)
{
for (int i = 0; i < CheckedListBox1.Items.Count; i++)
{
if (!CheckedListBox1.CheckedListBox.GetItemChecked(i))
{
Table1.Columns.Width = 0;
}
}
}
private void Table1_ManualBuild(object sender, EventArgs e)
{
DataSourceBase rep_grow = Report.GetDataSource("Items");
// Инициализировать
rep_grow.Init();
// Получить количество столбцов из источника данных
int colCount = rep_grow.Columns.Count;
// Получить заголовок таблицы, который содержит заголовки столбцов. Это строка с индексом = 0.
Table1.PrintRow(0);
for (int i = 0; i < colCount; i++)
{
// Загрузить названия колонок из источника
Cell1.Text = rep_grow.Columns.Alias;
// print it
Table1.PrintColumn(0);
}
//Выдать строки из источника данных
while (rep_grow.HasMoreRows)
{
// Получить тело таблицы
Table1.PrintRow(1);
for (int i = 0; i < colCount; i++)
{
// Заполнить ячейки из источника данных
Cell2.Text = rep_grow[rep_grow.Columns].ToString();
// Выдать
Table1.PrintColumn(0);
}
// Перейти к следующей строке
rep_grow.Next();
}
// AfterCalcBounds event is fired after calculating table bounds, just before
// printing the table. We will use it to correct the column's width.
Table1.ResultTable.AfterCalcBounds += new EventHandler(ResultTable_AfterCalcBounds);
}
private void ResultTable_AfterCalcBounds(object sender, EventArgs e)
{
TableResult resultTable = sender as TableResult;
float tableWidth = resultTable.Width;
float pageWidth = Engine.PageWidth;
if (tableWidth > pageWidth)
{
// установка ширины
float ratio = pageWidth / tableWidth;
foreach (TableColumn column in resultTable.Columns)
{
column.AutoSize = false;
column.Width *= ratio;
}
// РАссчитывается высота
resultTable.CalcHeight();
}
}
}
}