首页 > 解决方案 > "值不能为空。\r\n参数名称:文本"

问题描述

我有一个方法(Win App C#)填写DataGridView如下,并在我的TxB_ProitirySearch_TextChanged活动中使用它:

void PrioFillGrid(bool IsSearching= false)
{
    if (IsSearching)
    {
        var ddd = from p in db.PDP_Priorities
                  where p.PriorityTitle.Contains(aski.Change(TxB_ProitirySearch.Text))
                  orderby p.ID descending
                  select new { p.ID, Title = p.PriorityTitle };

        if (ddd.Count() > 0)     // Solution1
        { 
            DG_Priority.DataSource = ddd; 
        }

        if (ddd != null)        // Solution2
        { 
            DG_Priority.DataSource = ddd; 
        }
        else
        {
            DG_Priority.DataSource = from p in db.PDP_Priorities
                                     orderby p.ID descending
                                     select new { p.ID, Title = p.PriorityTitle };
        }
    }
    else
    {
        DG_Priority.DataSource = from p in db.PDP_Priorities
                                 orderby p.ID descending
                                 select new { p.ID, Title = p.PriorityTitle };
    }
}

当我输入一个字符时,它会很好地搜索并更新 gridview 中的数据,但按退格键清除文本框并开始新搜索会引发此异常:

System.Data.Linq.dll 中出现“System.ArgumentNullException”类型的未处理异常”

值不能为空。参数名称:文本

(注释:aski.Change(TxB_ProitirySearch.Text)是一个防止不需要的字符被保存在数据库中的类)

我想知道为什么解决方案 1 和 2 都无济于事。

有人可以帮我吗?

提前致谢。

标签: c#

解决方案


非常感谢各位大师。将“PriorityTitle.Contains 更改为 PriorityTitle?.Contains?” 对我不起作用,但使用其他指南,我更改了课程 aski.change() 如下:

public string Change(string k)
    {
        if (k==string.Empty)
        {
            return null;
        }
        else
        {
            //some codes...
            return str;
        }
    }

然后改变我的“PrioFillGrid()”方法如下:

void PrioFillGrid(bool IsSearching= false)
    {
        if (aski.Change(TxB_ProitirySearch.Text) == null)
        {
            DG_Priority.DataSource = from p in db.PDP_Priorities
                                     orderby p.ID descending
                                     select new { p.ID, Title = p.PriorityTitle };
        }
        else if (IsSearching && aski.Change(TxB_ProitirySearch.Text) != null)
        {
            var ddd= from p in db.PDP_Priorities
                                     where p.PriorityTitle.Contains(aski.Change(TxB_ProitirySearch.Text))
                                     orderby p.ID descending
                                     select new { p.ID, Title = p.PriorityTitle };
            DG_Priority.DataSource = ddd;
        }
        else
        {
            DG_Priority.DataSource = from p in db.PDP_Priorities
                                     orderby p.ID descending
                                     select new { p.ID, Title = p.PriorityTitle };
        }
    }

现在运行良好。再次感谢每一个人。


推荐阅读