步骤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; }
}
}
答案 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中显示的内容和在背景中以哪种格式保存的信息。
创建具有所需属性的类
public class Student { public string Name { get; set; } ... }
List<Student>
的内容时。了解如何通过使用某些绑定来可视化此类事物(还取决于您使用Winforms,WPF等的可视化)。students.Where(student => student.Name.StartsWith(search))
。到目前为止,许多较小的问题仅在一个问题中就可以解决。请尝试将您的问题分解为较小的问题,并寻找解决方案。如果遇到问题,请提出一个新问题。这就是我现在能为您做的。