Формула выбора записи параметра строки - PullRequest
0 голосов
/ 10 февраля 2012

Во-первых, я только начинаю изучать отчетность, все эти версии Crystal Report сбивают меня с толку. Во всяком случае, я использовал встроенные Crystal Reports в VS2008.

Я следую этому учебнику . У меня проблема с фильтрацией. Мне нужно применить два поля параметров к моему отчету - чтобы отсортировать его по типу или статусу пользователя. У меня они есть в поле cmb и рядом с ним текстовое поле для ввода текста и фильтрации отчета по нажатию кнопки.

  1. Когда я применил код фильтра к моей системе (после нажатия кнопки). Исходный код для загрузки всего отчета без фильтров не работал (при загрузке формы). Он показывает всплывающее окно с просьбой ввести значения параметров.
  2. Фильтр работал отлично .. пока я не добавил другое поле параметра и не попытался дублировать эффект. Я прошел через тот же процесс. Добавьте поле параметра, щелкните правой кнопкой мыши> Отчет> Формула выбора> Выбор записи, а затем добавьте еще одну строку. Это не сработало.

В моем редакторе формул выбора записей это выглядит следующим образом.

{UserType.UserType} = {?UserType}
{UserStatus.UserStatus} = {?UserStatus}

Полагаю, я не знаю, как присвоить его полю параметра. И я не знаю, как использовать редактор формул выбора записей.

Я хочу, чтобы в поле Параметр UserType был указан этот параметр {UserType.UserType} = {? UserType} и в поле Параметр UserStatus должно быть {UserStatus.UserStatus} = {? UserStatus}

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

    private void ShowReport_Btn_Click(object sender, EventArgs e)
    {
        //IF SELECTED
        if (Filter_cmb.SelectedItem.ToString() == "UserType") 
        {
            ReportDocument cryRpt = new ReportDocument();
            TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();

            cryRpt.Load("D:\\MY_THESIS\\WORKING FILES\\WindowsFormsApplication2\\WindowsFormsApplication2\\Reports\\Crystal Reports\\UsersReport.rpt");
            crConnectionInfo.ServerName = "RITZEL-PC\\SQLEXPRESS";
            crConnectionInfo.UserID = "NNIT-Admin";
            crConnectionInfo.Password = "password";
            crConnectionInfo.DatabaseName = "NNIT DB";

            Tables CrTables = cryRpt.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }

            ParameterFieldDefinitions crParameterFieldDefinitions;
            ParameterFieldDefinition crParameterFieldDefinition;
            ParameterValues crParameterValues = new ParameterValues();
            ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();

            crParameterDiscreteValue.Value = textBox1.Text;
            crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
            crParameterFieldDefinition = crParameterFieldDefinitions["UserType"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Clear();
            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

            crystalReportViewer1.ReportSource = cryRpt;
            crystalReportViewer1.Refresh();
        }
        else if (Filter_cmb.SelectedItem.ToString() == "UserStatus") 
        {
            ReportDocument cryRpt = new ReportDocument();
            TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();

            cryRpt.Load("D:\\MY_THESIS\\WORKING FILES\\WindowsFormsApplication2\\WindowsFormsApplication2\\Reports\\Crystal Reports\\UsersReport.rpt");
            crConnectionInfo.ServerName = "RITZEL-PC\\SQLEXPRESS";
            crConnectionInfo.UserID = "NNIT-Admin";
            crConnectionInfo.Password = "password";
            crConnectionInfo.DatabaseName = "NNIT DB";

            Tables CrTables = cryRpt.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }

            ParameterFieldDefinitions crParameterFieldDefinitions;
            ParameterFieldDefinition crParameterFieldDefinition;
            ParameterValues crParameterValues = new ParameterValues();
            ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();

            crParameterDiscreteValue.Value = textBox1.Text;
            crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
            crParameterFieldDefinition = crParameterFieldDefinitions["UserStatus"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Clear();
            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

            crystalReportViewer1.ReportSource = cryRpt;
            crystalReportViewer1.Refresh();
        }

1 Ответ

2 голосов
/ 12 февраля 2012

Ваша формула выбора записи должна быть:

{UserType.UserType} = {?UserType}
AND {UserStatus.UserStatus} = {?UserStatus}

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

...