Страница 1 из 1
Экранирование имён колонок
Добавлено: 08 ноя 2013, 13:25
Ptomaine
Здравствуйте,
Столкнулись вот с какой проблемой: отчёт составляется вручную, в коде.
Имеются вот такие строки:
Код: Выделить всё
StiText dataText = new StiText(new RectangleD(pos, 0, columnWidth, 0.5));
dataText.Text = "{"+tableName+"."+StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName)+"}";
Так вот, если имя колонки содержит символ "точка", например "
Остаток (руб.)", то компонента отчёта не может найти данные для этой колонки и выводит в отчёте пустую колонку. Если точку убрать, то всё ОК. Возможно ли как-то экранировать имя колонки, чтобы точка воспринималась не как разделитель имён, а как целостное имя колонки.
Спасибо.
Re: Экранирование имён колонок
Добавлено: 11 ноя 2013, 09:55
Aleksey
Здравствуйте,
Пожалуйста, попробуйте использовать следующий код ([Источник Данных].[Имя Колонки]):
Код: Выделить всё
dataText.Text = "{["+tableName+"].["+StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName)+"]}";
Спасибо.
Re: Экранирование имён колонок
Добавлено: 11 ноя 2013, 12:05
Ptomaine
Здравствуйте,
Не помогло. Даже стало ещё хуже. После Ваших предложенных изменений все колонки пустые.
Re: Экранирование имён колонок
Добавлено: 11 ноя 2013, 17:21
Aleksey
Здравствуйте,
Не смогли воспроизвести проблему. Не могли бы вы прислать простой пример, который ее воспроизводит.
Следующий код работает корректно:
Код: Выделить всё
StiReport report = new StiReport();
DataTable dt = new DataTable("Tbl");
dt.Columns.Add("Остаток (руб.)", typeof(String));
DataRow row;
row = dt.NewRow();
row["Остаток (руб.)"] = "asdsd";
dt.Rows.Add(row);
report.RegData(dt);
report.Dictionary.Synchronize();
StiText txt = new StiText();
txt.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(0.2, 0.2, 5.2, 0.8);
txt.Name = "DataTbl_Остаток";
txt.Text = new StiExpression("{Tbl." + StiCodeDomSerializator.ReplaceSymbols(dt.Columns[0].ColumnName) + "}");
txt.Page = report.Pages[0];
txt.Parent = report.Pages[0];
report.Pages[0].Components.Clear();
report.Pages[0].Components.AddRange(new Stimulsoft.Report.Components.StiComponent[] { txt });
report.Render();
report.Show();
Спасибо.
Re: Экранирование имён колонок
Добавлено: 12 ноя 2013, 13:18
Ptomaine
Вот такой код. Убрал лишнее, не связанное или очевидное.
Код: Выделить всё
DataSet od = new DataSet();
string tableName = "ReportTable" + CurrentThread.ManagedThreadId.ToString();
...
oracleDataAdapter.Fill(od);
...
DataTable dt = od.Tables[0];
dt.TableName = tableName;
report.RegData(od);
report.Dictionary.Synchronize();
...
foreach (DataColumn dataColumn in dt.Columns)
{
...
dataText.Text = "{" + tableName + "." + StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName) + "}";
...
}
...
Re: Экранирование имён колонок
Добавлено: 12 ноя 2013, 16:19
Aleksey
Здравствуйте,
Пожалуйста, попробуйте использовать следующий код:
Код: Выделить всё
dataText.Text = new StiExpression("{" + tableName + "." + StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName) + "}");
Спасибо.
Re: Экранирование имён колонок
Добавлено: 13 ноя 2013, 13:26
Ptomaine
К сожалению, не помогло. Только эта колонка, как и раньше, остаётся пустой.
Re: Экранирование имён колонок
Добавлено: 13 ноя 2013, 14:28
Aleksey
Здравствуйте,
Не смогли воспроизвести проблему на наших данных. Не могли бы вы прислать простое рабочее приложение, которое воспроизводит проблему для анализа.
Спасибо.