c# - 当 DropDownList 为 NULL 时返回所有数据
问题描述
我正在尝试修复一些错误和错误,但我没有及时注意。
我有两个下拉菜单(Status
是bit
)和(OrgUnitId int 0-9
)。
所以问题是当用户从这两个下拉列表中只选择一个记录并且默认情况下没有选择另一个下拉列表时 return 0
。
但是在我的示例中,我想修改它并创建如果用户仅选择Status = 1
它应该返回状态为 1 的记录和 OrgUnit 它应该返回所有数据而不过滤。
到目前为止,我为 catchStatus
和OrgUnitId
from DB 编写了这些代码并在 DropDownMenu 中显示
public void FillOrgUnit()
{
using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True"))
{
string com = "SELECT DISTINCT OrgUnitID FROM tblZaposleni_AD ORDER BY OrgUnitID ASC";
SqlDataAdapter adpt = new SqlDataAdapter(com, conn);
DataTable dt = new DataTable();
adpt.Fill(dt);
ddlOrgUnit.DataSource = dt;
ddlOrgUnit.DataTextField = "OrgUnitID";
ddlOrgUnit.DataValueField = "OrgUnitID";
ddlOrgUnit.DataBind();
ddlOrgUnit.Items.Insert(0, new ListItem("-- Izaberi Org Jedinicu --", "NULL"));
}
}
public void FillStatus()
{
using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True"))
{
string com = "SELECT DISTINCT Status FROM tblZaposleni_AD";
SqlDataAdapter adpt = new SqlDataAdapter(com, conn);
DataTable dt = new DataTable();
adpt.Fill(dt);
ddlStatus.DataSource = dt;
ddlStatus.DataTextField = "Status";
ddlStatus.DataValueField = "Status";
ddlStatus.DataBind();
ddlStatus.Items.Insert(0, new ListItem("-- Izaberi Status --", "NULL"));
}
}
这是我过滤数据的主要功能
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;
}
}
为了更好地理解我想要什么以及问题出在哪里,我编写了这个存储过程:
DECLARE @Status bit = 1,
@OrgJed int
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
这是这个存储过程的结果:
这是我在 View 中得到的结果
解决方案
It looks to me like when the ALL option is selected, that you are setting the parameter values to the string "NULL", rather than DBNull.Value.
尝试替换这个:
sda.SelectCommand.Parameters.Add("@Status", SqlDbType.Bit).Value = ddlStatus.SelectedValue == "1" ? true : false;
sda.SelectCommand.Parameters.Add("@OrgJed", SqlDbType.Int).Value = ddlOrgUnit.SelectedValue;
有了这个:
if (ddlStatus.SelectedValue == "NULL")
sda.SelectCommand.Parameters.Add("@Status", SqlDbType.Bit).Value = DBNull.Value;
else
sda.SelectCommand.Parameters.Add("@Status", SqlDbType.Bit).Value = ddlStatus.SelectedValue == "1" ? true : false;
if (ddlOrgUnit.SelectedValue == "NULL")
sda.SelectCommand.Parameters.Add("@OrgJed", SqlDbType.Int).Value = DBNull.Value;
else
sda.SelectCommand.Parameters.Add("@OrgJed", SqlDbType.Int).Value = ddlOrgUnit.SelectedValue;
推荐阅读
- c# - Visual Studio 无法发布
- node.js - 如何在一个 graphql 查询中匹配和连接两个解析器之间的结果?
- macos - MacOS - 请求音频/相机权限 - 显示错误的应用程序标题?
- java - 使用 SMTP 为 SendMail 函数编写单元测试
- javascript - 对异步函数执行测试时如何处理阻塞?
- flutter - 语法荧光笔不会展开以显示所有代码
- dexie - 添加主键作为参数时,Dexiedb Put 方法不起作用
- python - 如何在注册 Django 时检索用户 IP 地址、城市、国家/地区?
- python-3.x - 我如何获得这个输出?
- php - 使用 twilio 代理 api 进行通话录音