根据名称搜索从csv文件中获取详细信息c#

时间:2019-05-03 08:36:23

标签: c# winforms csv

步骤1:我创建了一个名为:“学生详细信息”的C#应用​​程序

第2步:添加了四个文本框,并将其命名为:

下面的图片可供参考:

Studentname.Text
StudentSurname.Text
StudentCity.Text
StudentState.Text

CSV文件中的数据

vikas,gadhi,mumbai,maharashtra

prem,yogi,kolkata,maha

roja,goal,orissa,oya

ram,kala,goa,barka

问题是,当我在文本框1 => studentname.Text中搜索名称时,如何从csv文件中将用户prem的所有数据(姓氏,城市,州)提取到上述文本框中,studentsurname,studentcity,studentstate。 >

下面是我卡在返回null和Load_Script_Click内的代码的代码

void Connection_fetch_details(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        if (line.Split(',')[0].Equals(searchName))
        {
            Connection_fetch_details cd = new Connection_fetch_details()
            {
                username = line.Split(',')[1]
            };
        }
    }
    return;
}

private void Load_Script_Click(object sender, EventArgs e)
{
    // load script is button 

    String con_env = textenv.Text.ToString();
    //Address Address = GetAddress("vikas");
    //textsurname.text = Address.Surname

    Connection_fetch_details cd = Connection_fetch_details(con_env);
    textusername.Text = cd.username;
}

==============================================================
Class file name : Address.class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DDL_SCRIPT_GENERATOR
{
    public class Connection_fetch_details
    {
        public string username { get; set; }
    }
}

2 个答案:

答案 0 :(得分:2)

主要问题是您的方法是void,这意味着它不返回任何值。因此,即使您可能找到匹配项并创建Connection_fetch_details对象,也不会将该结果返回给调用方法。

这将解决该问题:

Connection_fetch_details Connection_fetch_details(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        if (line.Split(',')[0].Equals(searchName))
        {
            Connection_fetch_details cd = new Connection_fetch_details()
            {
                username = line.Split(',')[1]
            };
            return cd; //return the object containing the matched username
        }
    }
    return null;
}

现在,如果有匹配项,它将返回Connection_fetch_details对象,如果没有匹配项,则将返回null


接下来,您询问是否要返回所有字段,而不仅仅是返回一个。为此,您需要

a)向您的对象添加更多属性

b)添加更多代码以从CSV填充这些属性

c)添加代码以使用对象的结果填充文本框。

我还要将“用户名”重命名为更相关的名称,因为您在问题中描述的所有字段名都不匹配。出于相同的原因,我还将把您的班级重命名为“学生”,并重命名您的搜索方法。

这是一个例子:

Student searchStudent(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        var split = line.Split(',');
        if (split[0].Equals(searchName))
        {
            Student s = new Student()
            {
                firstname = searchName,
                surname = split[1],
                city = split[2],
                state = split[3]
            };
            return s; //return the object containing the matched name
        }
    }
    return null;
}

private void Load_Script_Click(object sender, EventArgs e)
{
    // load script is button 

    String con_env = textenv.Text.ToString();
    //Address Address = GetAddress("vikas");
    //textsurname.text = Address.Surname

    Student st = searchStudent(con_env);
    textsurname.Text = st.surname;
    txtcity.Text = st.city;
    txtstate.Text = st.state;
}

namespace DDL_SCRIPT_GENERATOR
{
    public class Student
    {
        public string firstname { get; set; }
        public string surname { get; set; }
        public string city { get; set; }
        public string state { get; set; }
    }
}

答案 1 :(得分:1)

要实现您的目标,您必须以更精细的步骤进一步分离问题,并区分您在UI中显示的内容和在背景中以哪种格式保存的信息。

  1. 创建具有所需属性的类

    public class Student { public string Name { get; set; } ... }
    
  2. 了解如何使用CsvHelperCsvReader之类的现有库将csv文件读入此类对象。

  3. 当您在此部分中遇到类似List<Student>的内容时。了解如何通过使用某些绑定来可视化此类事物(还取决于您使用Winforms,WPF等的可视化)。
  4. 取决于可视化组件,它已经支持过滤,或者您需要使用例如LINQ以获取匹配的元素students.Where(student => student.Name.StartsWith(search))

到目前为止,许多较小的问题仅在一个问题中就可以解决。请尝试将您的问题分解为较小的问题,并寻找解决方案。如果遇到问题,请提出一个新问题。这就是我现在能为您做的。