Динамическая двумерная таблица или обращение к элементам crossData в цикле

Обсуждение Stimulsoft Reports.WPF
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

Aleksey писал(а): 04 авг 2021, 15:46 Здравствуйте,

Можно проверять как

Код: Выделить всё

if (Sheet1.DataTable.Columns[Line].ToString() != "col2")
{
	Variable1 = Sheet1.DataTable.Rows[rowid][Line].ToString();
}
else
	Variable1 = ""
У меня не исчезают колонки.. ведь если в Variable1 находится пустая строка то он выводит пустую ячейку..
Хотя ваш код пригодился мне для фильтрации всех значений.
Но я по прежнему не понимаю как полностью скрыть столбцы.
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

Я изменил ваш код на следующий:

Код: Выделить всё

if (List.Contains(Sheet1.DataTable.Columns[Line].ToString()))
{
	Variable1 = Sheet1.DataTable.Rows[rowid][Line].ToString();
}
else
	Variable1 = ""

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

PS
Пустые столбцы так и выводятся.
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

Ок, я добился того, что бы общее количество столбцов было равно необходимому, для этого я просто изменил выражение для CountData.
Так же я понял почему не выводились необходимые столбцы на других страницах. Дело было в переменной LIne, она немного странно изменялась, я поставил ее обнуление в событии BeforePrint в FooterBand.
Но теперь есть другая проблема.. Когда проверка из кода выше выдает false, то она рисует пустую колонку, но мне не всегда это нужно.
Например, у меня в списке LIst всего 2 названия, но в DataTable они находятся, например, в конце, тогда будут отрисованы все пустые столбцы,и последние 2 со значениями, а мне нужно что бы этих пустых столбцов небыло..
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

Я подумал, и пришел к выводу, что эти пустые столбцы нужно убирать уже после печати, потому что иначе я впринципе не могу получить необходимые мне данные..
Но как это сделать если напрямую к ним обратиться нельзя..
Или.. может быть можно создать ещё один список int[], куда записывать значение LIne которые не прошли по условию - т.е. пустые столбцы, а потом просто ремунуть их..? Так можно?
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

Aleksey писал(а): 04 авг 2021, 15:46 Здравствуйте,

Можно проверять как

Код: Выделить всё

if (Sheet1.DataTable.Columns[Line].ToString() != "col2")
{
	Variable1 = Sheet1.DataTable.Rows[rowid][Line].ToString();
}
else
	Variable1 = ""
Я подставил в ваш изначальный пример эту фильтрацию, и получил такой же итог как и в своем отчете - столбец который был отфильтрован так и остался, просто он теперь пустой
Вложения
Без имени.png
Без имени.png (1.98 КБ) 1582 просмотра
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

а это нормально что меня игнорят?
molochnii
Сообщения: 47
Зарегистрирован: 29 июл 2021, 14:43

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение molochnii »

видимо да))
ок, спасибо)
Kirill Klimenkov

Re: Динамическая двумерная таблица или обращение к элементам crossData в цикле

Сообщение Kirill Klimenkov »

Здравствуйте,

Извините за задерку.
Можно написать так

Код: Выделить всё

if (Sheet1.DataTable.Columns[Line].ToString() != "col2")
{
	Variable1 = Sheet1.DataTable.Rows[rowid][Line].ToString();
}
else
	CrossDataBand1.Enabled = false
В таком случае колонка с названием "col2" не будет отображена.

Спасибо.
Ответить