【发布时间】:2017-09-05 18:51:26
【问题描述】:
每个星期一我都会收到一个导出的地址簿...我的老板想要一个程序来访问这些信息。是的,有很多方法是有意义的(比如将其导入 Outlook),但我们正在走独立应用程序的路线。我无法控制当前作为“制表符”分隔文件到达的传入文件(信息或格式)。我的代码完全按照它目前的设计目的。但是,我想添加一个搜索功能,但我不知道是否可以以我现在拥有的形式进行,或者是否需要更改我导入信息的方式。
标签文件进来(名称(Fisrt_Last)、部门、职务、电子邮件、OfficePH、MobilePH)。
我正在解析文件,并创建一个数组列表。我希望能够按姓氏搜索。这可能吗?还是我完全走错了路?
public Form1()
{
InitializeComponent();
//for (int i = 0; i < Program.contacts.Length; i++)
//{
// listView1.Items.Add(Program.contacts.ElementAt(i).ToString());
//}
string name, department, title, emailAddress, officePhone, mobilePhone;
ArrayList contacts = new ArrayList();
using (GenericParser parser = new GenericParser())
{
parser.SetDataSource("S:/DEPARTMENTS/INFO_TECH/PERM/short_cuts/Addressbook.txt");
parser.ColumnDelimiter = '\t';
parser.FirstRowHasHeader = true;
parser.SkipStartingDataRows = 0;
parser.MaxRows = 15000;
parser.TextQualifier = '\"';
while (parser.Read())
{
name = parser["Name"];
department = parser["Department"];
title = parser["Title"];
emailAddress = parser["EmailAddress"];
officePhone = parser["OfficePhone"];
mobilePhone = parser["MobilePhone"];
contacts.Add(new contact(name, department, title, emailAddress, officePhone, mobilePhone));
}
listBox1.DataSource = contacts;
listBox1.DisplayMember = "CName";
}
}
private void listBox1_DoubleClick(object sender, EventArgs e)
{
string n = ((contact)listBox1.SelectedItem).CName;
string d = ((contact)listBox1.SelectedItem).CDept;
string t = ((contact)listBox1.SelectedItem).CTitle;
string em = ((contact)listBox1.SelectedItem).CEmail;
string o = ((contact)listBox1.SelectedItem).COPhone;
string m = ((contact)listBox1.SelectedItem).CMPhone;
textBox1.Text = n;
textBox2.Text = d;
textBox3.Text = t;
textBox4.Text = em;
textBox5.Text = o;
textBox6.Text = m;
}
【问题讨论】:
-
您必须拥有
ArrayList是否有特定原因?你不能用List<Contacts>吗? -
只需将您的
ArrayList更改为List<contact>并使用 linqvar searchResult = contacts.Where(x=>x.lastName="search string").ToList(); -
@Sach 我刚从学校毕业,我上面没有开发人员(下沉或游泳)你能指点我一个好的列表资源吗?