Измените поле со списком, чтобы вернуть значение NULL - PullRequest
0 голосов
/ 17 июня 2020

Создаю одно приложение для создания Reports и обнаруживаю здесь одну ошибку. Когда я запускаю приложение, Статус всегда выбирается как 0, а OrgUnitId - как 0, а результат возврата приложения - Report, но в моей процедуре хранения я помещаю условие, если значение равно NULL, ему необходимо вернуть все данные из базы данных

USE [DesignSaoOsig1]
GO
/****** Object:  StoredProcedure [dbo].[TestReport]    Script Date: 17. 6. 2020. 08:31:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TestReport]
(           
    @Status bit,
    @OrgJed int
) 
AS  
BEGIN
    SELECT PrezimeIme,NetworkLogin,Status,OrgUnitId,DT_Creat,DT_Modif
    FROM [DesignSaoOsig1].[dbo].[tblZaposleni_AD]
    WHERE (@Status IS NULL OR Status = @Status) AND (@OrgJed IS NULL OR OrgUnitID = @OrgJed)
END

Изображение 1

Итак, я хочу добавить в поле со списком InitialValue, которое будет Status и OrgUnitId, и когда приложение загружено, ему сначала нужно показать все записи в Report, но когда пользователь выбирает параметры, необходимые для фильтрации. Итак, вот мой исходный код, в который я вставляю значение combobox

public void FillStatus()
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True"))
                {
                    conn.Open();
                    string query = "SELECT DISTINCT Status FROM tblZaposleni_AD";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    using (SqlDataReader saReader = cmd.ExecuteReader())
                    {
                        while (saReader.Read())
                        {
                            byte dbValue = saReader.GetByte(0);
                            string name = dbValue.ToString();
                            ddlStatus.Items.Add(name);
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

, а также другое поле со списком

 public void FillOrgUnit()
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True"))
                {
                    conn.Open();
                    string query = "SELECT DISTINCT OrgUnitID FROM tblZaposleni_AD ORDER BY OrgUnitID ASC";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    using (SqlDataReader saReader = cmd.ExecuteReader())
                    {
                        while (saReader.Read())
                        {
                            string name = saReader.GetInt64(0).ToString();
                            ddlOrgUnit.Items.Add(name);
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

И вот основная функция для фильтрации отчета

 private void GetReports(XtraReport report)
        {
            try
            {
                string connString = @"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connString);
                string strproc = "TestReport";
                using (SqlDataAdapter sda = new SqlDataAdapter(strproc, connString))
                {
                    DataSet ds = new DataSet();
                    SqlCommand cmd = new SqlCommand();
                    sda.SelectCommand.CommandType = CommandType.StoredProcedure;

                    sda.SelectCommand.Parameters.Add("@Status", SqlDbType.Bit).Value = ddlStatus.SelectedValue == "1" ? true : false;
                    sda.SelectCommand.Parameters.Add("@OrgJed", SqlDbType.Int).Value = ddlOrgUnit.SelectedValue;
                    sda.Fill(ds);

                    string[] arrvalues = new string[ds.Tables[0].Rows.Count];

                    for (int loopcounter = 0; loopcounter < ds.Tables[0].Rows.Count; loopcounter++)
                    {
                        //assign dataset values to array
                        arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["PrezimeIme"].ToString();
                        arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["NetworkLogin"].ToString();
                        arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["Status"].ToString();
                        arrvalues[loopcounter] = ds.Tables[0].Rows[loopcounter]["OrgUnitID"].ToString();
                    }


                    report.DataSource = ds;
                    report.DataMember = ds.Tables[0].TableName.ToString();


                }
            }
            catch (Exception)
            {
                throw;
            }
        }

А вот функция Page_Load, которую я использую для загрузки этих двух функций, а также для загрузки отчетов в поле со списком

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string path = @"\Reports\";
                CustomReportStorageWebExtension reportsStorage = new CustomReportStorageWebExtension(path);
                ddlReportName.DataSource = reportsStorage.GetUrls();
                ddlReportName.DataBind();

                //Call function for populate cb
                FillStatus();
                FillOrgUnit();
            }

            else
            {
                XtraReport reportToOpen = null;
                switch (ddlReportName.SelectedValue)
                {
                    case "Zaposleni 1":
                        reportToOpen = new ZaposleniSaoOsig1();
                        break;
                    case "Zaposleni 2":
                        reportToOpen = new ZaposleniSaoOsig2();
                        break;
                    case "Zaposleni 3":
                        reportToOpen = new ZaposleniSaoOsig3();
                        break;
                }
                GetReports(reportToOpen);
                ASPxWebDocumentViewer1.OpenReport(reportToOpen);                              
            }

        }
...