【发布时间】:2015-11-02 21:18:06
【问题描述】:
我有一个名为 cmbCaseRemain 的组合框,它的数据通过代码从数据表中填充
cmbCaseRemain.DataSource = ce.GET_ALL_CASEREMAIN();
cmbCaseRemain.DisplayMember = "caseRemain";
cmbCaseRemain.ValueMember = "idCaseRemain";
我有一个名为 dgv_CaseRemain 的数据网格视图从另一个数据表中获取数据
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;
}
但我遇到了错误
对象引用未设置为对象的实例。
谢谢
(对不起我的英语不好:-))
【问题讨论】:
-
什么是“ce”? " ce.GET_ALL_CASEREMAIN();"在这段代码中 ce 可能为空,你是 init 吗? ce 对象?
-
"ce" 数据表的来源......它不为空
public DataTable GET_ALL_CASEREMAIN() { DataTable dt = new DataTable(); dt = DAL.SelectData("GET_ALL_CASEREMAIN", null); DAL.close(); return dt; } -
调试你的应用,看看它在哪一行失败。这是非常常见的错误,当您在没有 init 的情况下访问对象时会发生这种情况。我的下一个猜测是“this.dgv_CaseRemain.CurrentRow.Cells[1].Value”行。请进行调试并找到确切的行。这是解决您的问题的最佳方法。没有人能猜出你的整个代码。
-
我试试看....谢谢
-
该行中的错误
dt = ce.FILTER_CMB_CASEREMAIN(Convert.ToInt32(this.dgv_CaseRemain.CurrentRow.Cells[1].Value));
标签: c# winforms datagridview combobox