繁体   English   中英

C#winform根据datagridview值过滤组合框项目

[英]C# winform Filter combobox items based on datagridview values

我有一个名为cmbCaseRemain的组合框,其数据由代码从datatable填充

cmbCaseRemain.DataSource = ce.GET_ALL_CASEREMAIN();
cmbCaseRemain.DisplayMember = "caseRemain";
cmbCaseRemain.ValueMember = "idCaseRemain";

我有一个名为dgv_CaseRemain的datagridview从另一个数据dgv_CaseRemain获取数据

DataTable dt = new DataTable();
dt = ce.GET_ALL_CASEREMAIN_FILTER(Convert.ToInt32(txtidCase.Text));
dgv_CaseRemain.DataSource = dt;

我正在使用组合框将项目添加到datagrid视图中...我想在每次添加后对组合框中的项目进行过滤,以使用户不能两次添加相同的值...所以我创建了一个存储过程一个参数

CREATE PROC [dbo].[FILTER_CMB_CASEREMAIN]
    @ID int
AS
    SELECT 
        [idCaseRemain], [caseRemain]
    FROM 
        [dbo].[tblCaseRemain]
    LEFT OUTER JOIN 
        tblCase_Link_Remain ON idCaseRemain = idCaseRemain_L
    WHERE 
        [idCaseRemain] <> @ID;

并使用代码传递参数,该参数在我单击组合框时对其进行过滤

DataTable dt = new DataTable();
dt = ce.FILTER_CMB_CASEREMAIN(Convert.ToInt32(this.dgv_CaseRemain.CurrentRow.Cells[1].Value));

if (dt.Rows.Count > 0)
{
    cmbCaseRemain.DisplayMember = "caseRemain";
    cmbCaseRemain.ValueMember = "idCaseRemain";
    cmbCaseRemain.DataSource = dt;
}

但我有一个错误

你调用的对象是空的。

谢谢

( 对不起,我的英语不好 :-) )

好。 得到它了。 正如我所说,那是错误的。 使用下面的代码。 在下面,我添加验证以检查空值。

int n = 0;
DataTable dt;
if (this.dgv_CaseRemain.CurrentRow.Cells[1].Value != null)
{
    if (int.TryParse(this.dgv_CaseRemain.CurrentRow.Cells[1].Value.ToString(), out n))
    {
        dt = ce.FILTER_CMB_CASEREMAIN(n);
    }
}
if (dt!=null && dt.Rows.Count > 0)
{

    cmbCaseRemain.DisplayMember = "caseRemain";
    cmbCaseRemain.ValueMember = "idCaseRemain";
    cmbCaseRemain.DataSource = dt;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM