我有一个名为cmbCaseRemain
的组合框,其数据由代码
cmbCaseRemain.DataSource = ce.GET_ALL_CASEREMAIN();
cmbCaseRemain.DisplayMember = "caseRemain";
cmbCaseRemain.ValueMember = "idCaseRemain";
我有一个名为dgv_CaseRemain
的datagridview从另一个数据表中获取数据
DataTable dt = new DataTable();
dt = ce.GET_ALL_CASEREMAIN_FILTER(Convert.ToInt32(txtidCase.Text));
dgv_CaseRemain.DataSource = dt;
我正在使用组合框将项目添加到数据网格视图...我想在每次添加后过滤组合框中的项目,这样用户就无法再添加两次相同的值...所以我创建了一个带参数的存储过程
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;
}
但我收到了错误
对象引用未设置为对象的实例。
谢谢
(抱歉我的英文不好:-))
答案 0 :(得分:1)
确定。得到它了。正如我所说,那条线上的错误。使用以下代码。下面我添加验证以检查空值。
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;
}