C# 如何从列表框中获取特定项以显示在txt框中

C# 如何从列表框中获取特定项以显示在txt框中,c#,visual-studio,C#,Visual Studio,我目前正在制作一个程序,让用户选择一个ID号,用户从列表框中选择的ID号将在三个单独的txt框中显示名字、姓氏和爱好。从ID、姓名和爱好中获取的数据都是从csv文件中读取的。如何准确地选择一个ID以在txt框中显示所需的数据 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

我目前正在制作一个程序,让用户选择一个ID号,用户从列表框中选择的ID号将在三个单独的txt框中显示名字、姓氏和爱好。从ID、姓名和爱好中获取的数据都是从csv文件中读取的。如何准确地选择一个ID以在txt框中显示所需的数据

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StudentInformation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<ID> events = new List<ID>();
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] lines = System.IO.File.ReadAllLines("class.csv");
            {
                foreach(var line in lines)
                {
                    String[] words = line.Split(',');
                    string Id = words[0];
                    string last = words[1];
                    string first = words[2];
                    string hobby = words[3];
                    listBox1.Items.Add(last);
                    double.Parse(listBox1.SelectedItems) == 
                }
            }
        }
    }
}

您可以在后端设置词典-从下拉列表中选择的项将是词典的键(在解析csv时设置)

然后在列表框索引中更改代码,您可以执行以下操作

if(string.IsNullOrWhiteSpace(listbox1.Text))
   {
           //clear textboxes here
    }
  else
  {
       var student = studentDictionary[listbox1.Text];
       //populate textboxes here
   }
不过,有些轻微的通用编码技巧可以在类和对象命名约定上使用。永远不要将类命名为“ID”-即使您的类表示ID,也要更加具体,因为ID在任何地方都被用作属性。根据您对该项目的关注程度,在将csv加载到字典中时,您可能还需要进行一些检查,以确保没有重复的学生、具有空值的学生或加载空csv行的学生。您可能还应该将ID设置为公共类,并将其字段设置为公共

编辑:


你可能还想考虑切换到DoopDopDype DROPPDROW列表的组合框——看起来它可能更适用于你的情况

你可以在后端设置一个字典——从下拉菜单中选择的项目将是你的字典的关键(当你解析CSV时你会设置它)

然后在列表框索引中更改代码,您可以执行以下操作

if(string.IsNullOrWhiteSpace(listbox1.Text))
   {
           //clear textboxes here
    }
  else
  {
       var student = studentDictionary[listbox1.Text];
       //populate textboxes here
   }
不过,有些轻微的通用编码技巧可以在类和对象命名约定上使用。永远不要将类命名为“ID”-即使您的类表示ID,也要更加具体,因为ID在任何地方都被用作属性。根据您对该项目的关注程度,在将csv加载到字典中时,您可能还需要进行一些检查,以确保没有重复的学生、具有空值的学生或加载空csv行的学生。您可能还应该将ID设置为公共类,并将其字段设置为公共

编辑:


您可能还想考虑切换到DoopDopDype DROPPINDOWS列表的组合框——看起来它可能更适用于您的情况

您可以定义<代码>列表>代码>,并通过LINQ.</P>查询相应的项。 此外,还需要在class
ID
中定义相应的属性

class ID
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hobby { get; set; }

    public ID(string eId, string eFirstName, string eLastName, string eHobby)
    {
        Id = eId;
        FirstName = eFirstName;
        LastName = eLastName;
        Hobby = eHobby;
    }
}
下面是一个使用LINQ的简单演示

// list to store all items
List<ID> iDs = new List<ID>();

private void Form1_Load(object sender, EventArgs e)
{
    // get data from csv
    string[] lines = System.IO.File.ReadAllLines("class.csv");
    {
        foreach (var line in lines)
        {
            String[] words = line.Split(',');
            string Id = words[0];
            string last = words[1];
            string first = words[2];
            string hobby = words[3];
            // add items to list
            iDs.Add(new ID(Id, last, first, hobby));
            // add ids to listbox
            listBox1.Items.Add(Id);
        }
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // LINQ query
    ID id = iDs.Where(x => x.Id == listBox1.Text).FirstOrDefault();
    tblast.Text = id.LastName;
    tbfirst.Text = id.FirstName;
    tbhobby.Text = id.Hobby;
}
//用于存储所有项目的列表
列表ID=新列表();
私有void Form1\u加载(对象发送方、事件参数e)
{
//从csv获取数据
string[]line=System.IO.File.ReadAllLines(“class.csv”);
{
foreach(行中的var行)
{
String[]words=line.Split(',');
字符串Id=单词[0];
字符串last=单词[1];
第一个字符串=单词[2];
字符串爱好=单词[3];
//将项目添加到列表中
添加(新ID(ID,最后一个,第一个,爱好));
//将ID添加到列表框
listBox1.Items.Add(Id);
}
}
}
私有无效列表框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
//LINQ查询
ID ID=ID.Where(x=>x.ID==listBox1.Text).FirstOrDefault();
tblast.Text=id.LastName;
tbfirst.Text=id.FirstName;
tbhobby.Text=id.Hobby;
}

您可以定义一个
列表
,并通过LINQ查询相应的项目

此外,还需要在class
ID
中定义相应的属性

class ID
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hobby { get; set; }

    public ID(string eId, string eFirstName, string eLastName, string eHobby)
    {
        Id = eId;
        FirstName = eFirstName;
        LastName = eLastName;
        Hobby = eHobby;
    }
}
下面是一个使用LINQ的简单演示

// list to store all items
List<ID> iDs = new List<ID>();

private void Form1_Load(object sender, EventArgs e)
{
    // get data from csv
    string[] lines = System.IO.File.ReadAllLines("class.csv");
    {
        foreach (var line in lines)
        {
            String[] words = line.Split(',');
            string Id = words[0];
            string last = words[1];
            string first = words[2];
            string hobby = words[3];
            // add items to list
            iDs.Add(new ID(Id, last, first, hobby));
            // add ids to listbox
            listBox1.Items.Add(Id);
        }
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // LINQ query
    ID id = iDs.Where(x => x.Id == listBox1.Text).FirstOrDefault();
    tblast.Text = id.LastName;
    tbfirst.Text = id.FirstName;
    tbhobby.Text = id.Hobby;
}
//用于存储所有项目的列表
列表ID=新列表();
私有void Form1\u加载(对象发送方、事件参数e)
{
//从csv获取数据
string[]line=System.IO.File.ReadAllLines(“class.csv”);
{
foreach(行中的var行)
{
String[]words=line.Split(',');
字符串Id=单词[0];
字符串last=单词[1];
第一个字符串=单词[2];
字符串爱好=单词[3];
//将项目添加到列表中
添加(新ID(ID,最后一个,第一个,爱好));
//将ID添加到列表框
listBox1.Items.Add(Id);
}
}
}
私有无效列表框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
//LINQ查询
ID ID=ID.Where(x=>x.ID==listBox1.Text).FirstOrDefault();
tblast.Text=id.LastName;
tbfirst.Text=id.FirstName;
tbhobby.Text=id.Hobby;
}