【发布时间】:2013-12-10 16:02:28
【问题描述】:
我正在尝试编写议程。为每个联系人显示一个小表单(这在 MDI 父表单中)。使用我当前的代码,所有联系人都被写入文件;我呈现信息的方式是一次显示所有联系人(这肯定不会吸引最终用户)。
我当然需要按字母顺序显示联系人。文件每一行的第一个字段是联系人姓氏,可以帮助我进行排序。这个菜鸟卡住的地方是,如何根据姓氏的第一个字母提取行,以便我可以像在真实议程中一样呈现信息?
我看到其他人的一个问题,答案是子列表和“分组依据”功能。但是没有解释代码,那对我来说就像中文一样。
我在想也许可以根据姓氏的第一个字母将我的“所有联系人文件”拆分为小文件(但这会是太多的小文件,也许不是一个好习惯?)。如果这不是一个坏主意,怎么可能实现?
我创建了一个“人”类。并使用此代码添加一个新联系人:
private void btn_CM_addNew_Click(object sender, EventArgs e)
{
_contact.FirstName = txt_CM_name.Text;
_contact.LastName = txt_CM_lastName.Text;
//Person.lista.Add(_contact);
StreamWriter file = new StreamWriter("C:\\CA_Contacs.txt", true);
file.WriteLine(_contact.ToString());
file.Close();
this.Close();
}
使用此代码,我可以显示“联系人卡片”:
if ((new FileInfo("C:\\CA_Contacs.txt").Exists == true))
{
var reader = new StreamReader(File.OpenRead("C:\\CA_Contacs.txt"));
while (!reader.EndOfStream)
{
Person _contact = new Person();
var line = reader.ReadLine();
var attributes = line.Split(',');
_contact.LastName = attributes[0];
_contact.FirstName = attributes[1];
ContactCard contactCardItem = new ContactCard();
contactCardItem.MdiParent = this;
contactCardItem.Text = _contact.LastName + ", " + _contact.FirstName;
contactCardItem.Contact = _contact;
contactCardItem.Show();
this.LayoutMdi(MdiLayout.TileVertical);
}
}
您会建议哪些方法可以按字母顺序显示联系人?
换句话说,如何从文件中提取以“A”或“a”开头的所有行,将所有这些行放在自己的组中(列表、子列表、文件、您建议的其他结构)所以我以后可以只显示该组,而不是“CA_Contacs.txt”文件中的所有联系人?
【问题讨论】: