Создаю одно приложение для создания 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);
}
}