将过滤后的DataGridView分配给DataRow [],给出空值(过滤器有结果)

时间:2016-07-08 06:33:31

标签: c# winforms datagridview nullreferenceexception

我正在使用C#开发Windows窗体应用程序。

我有一个DataGridView的表单,您可以添加/删除条目,条目包含可编辑的Qty列,然后是Save按钮。

点击Save后,我想过滤DataGridView的{​​{1}}条目,然后通知用户列表中有0.00 Qty,否则继续保存。 (请在点击保存之前查看表单的屏幕截图)

Form where the user add/delete entry and set the Qty

我在下面的代码中有以下代码:

0.00 Qty

我的问题是此行发生了 private void SaveBtn_Click(object sender, EventArgs e) { if (isWithZeroQty() == true) { MessageBox.Show("Please check Quantity","System Alert",MessageBoxButtons.OK,MessageBoxIcon.Warning); } else { // Will do the saving.. } } private bool isWithZeroQty() { DataRow[] result = (enrollmedsDataGridView.DataSource as DataTable).Select("Qty = 0.00 OR Qty = 0"); if (result.Count() > 0) { return true; } else { return false; } }

NullReferenceException

根据我的进一步调查,在将DataGridView转换为DataTable DataRow[] result = (enrollmedsDataGridView.DataSource as DataTable).Select("Qty = 0.00 OR Qty = 0"); 时会发生NullReferenceException。

是因为DataGridView是DataBounded到BindingSource吗?

如果是这样,我该如何解决这个问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我仍然无法找到上述代码中出现NullReferenceException的原因。

但是作为一种解决方法,我没有过滤和转换DataGridViewDataTable,而是在每一行上使用foreach来检查单元格Qty是否有0 or 0.00值我的结局很好。

见下面的代码:

    private bool isWithZeroQty()
    {
        int zeros = 0;
        foreach (DataGridViewRow row in enrollmedsDataGridView.Rows)
        {
            if ((row.Cells["Qty"].Value.ToString() == "0") || (row.Cells["Qty"].Value.ToString() == "0.00"))
            {
                zeros = 1;
            }
        }
        if (zeros > 0)
        { return true; }
        else
        { return false; }
    }