【问题标题】:C# winform Filter combobox items based on datagridview valuesC# winform 根据 datagridview 值过滤组合框项目
【发布时间】: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


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多