Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用带有空格的字符串上的.contains方法时,“对象引用未设置为对象的实例”_C#_Winforms_Visual Studio 2010 - Fatal编程技术网

C# 使用带有空格的字符串上的.contains方法时,“对象引用未设置为对象的实例”

C# 使用带有空格的字符串上的.contains方法时,“对象引用未设置为对象的实例”,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,首先,我对C和windows窗体相当陌生。通常我都能在网上找到问题的答案,但这个问题我一直找不到 我想我要做的是一件非常简单的事情,但是错误总是阻碍我。我在表单上有一个文本框和一个列表框。我希望用户能够通过开始在文本框中键入名称来快速在数据表中找到名称,并且所有符合他目前键入的名称都将显示在列表框中 所以,我有一个Access数据库,我把它放在Tableadapters中。然后,我将员工列表中的数据放入DataTable。我的文本框称为textbox1。理想情况下,我可以在搜索中使用“*”字符作

首先,我对C和windows窗体相当陌生。通常我都能在网上找到问题的答案,但这个问题我一直找不到

我想我要做的是一件非常简单的事情,但是错误总是阻碍我。我在表单上有一个文本框和一个列表框。我希望用户能够通过开始在文本框中键入名称来快速在数据表中找到名称,并且所有符合他目前键入的名称都将显示在列表框中

所以,我有一个Access数据库,我把它放在Tableadapters中。然后,我将员工列表中的数据放入DataTable。我的文本框称为textbox1。理想情况下,我可以在搜索中使用“*”字符作为通配符,如下所示:

private void textBox1_TextChanged(object sender, EventArgs e)
{    
    //Put data into the datatable and seach
    DataTable EmployeeTable = this.tblEmployeesTableAdapter.GetData();
    var EmployeeNames = from Employees in EmployeeTable.AsEnumerable()
                        where Employees.Field<string>("Full Name") == * + textbox1.Text + *
                        select Employees.Field<string>("Full Name");
    this.listBox1.DataSource = EmployeeNames.ToList();
}
DataTable EmployeeTable = this.tblEmployeesTableAdapter.GetData();
var EmployeeNames = from Employees in EmployeeTable.AsEnumerable()
                    where Employees.Field<string>("Full Name").Contains(textBox1.Text) 
                    select Employees.Field<string>("Full Name");
this.listBox1.DataSource = EmployeeNames.ToList()
这个很好用


我想我对此有点困惑。另外,我知道还有其他方法可以做到这一点,比如拆分字符串并搜索每个单独的字符串,或者在主窗体上为名字和姓氏设置一个单独的文本框,然后根据名字和姓氏列分别搜索数据表。这是做我想做的事情的最干净的方式,所以我只是想了解我做错了什么。非常感谢大家的帮助。

你能把代码改成检查空值吗

!!String.IsNullOrEmptystring

如AVEITAS建议的,考虑使用ISNulLuleWeleStay.


很明显,返回的字符串之一是空引用。带空格的名称不是原因。该列中很可能有空值的行,以及一些空字符串的行。根据您用来查看数据的工具,它们可能看起来相同,但读取和处理方式不同。您可能希望使用的数据可能重复!改为string.IsNullOrWhiteSpace,因为在本例中,空格也不是有效的条目。添加了一个链接,比较这两者:shot。我的数据库中隐藏了一个以前没有修复过的空引用。这就是原因。不过,我会接受您的建议,并为将来的问题更改代码。谢谢!
where Employees.Field<string>("First Name").Contains(textBox1.Text)
var EmployeeNames = from Employees in EmployeeTable.AsEnumerable()
                    select Employees.Field<string>("Full Name");

foreach (string EmployeeName in EmployeeNames)
    if (EmployeeName.Contains(textbox1.Text))
         this.listBox1.Items.Add(EmployeeName);
string name = "Tom Riddle";
bool does_contain = name.Contains("To");
var EmployeeNames = from Employees in EmployeeTable.AsEnumerable()
                    select Employees.Field<string>("Full Name");

foreach (string EmployeeName in EmployeeNames)
    if (!String.IsNullOrEmpty(EmployeeName) && EmployeeName.Contains(textbox1.Text))
         this.listBox1.Items.Add(EmployeeName);