내 ListBox에서 특정 항목을 가져 와서 txt 상자에 표시하는 방법
저는 현재 사용자가 ID 번호를 선택할 수있는 프로그램을 만들고 있으며 사용자가 목록 상자에서 선택한 번호는 세 개의 개별 txt 상자에 이름, 성 및 취미를 표시합니다. ID, 이름 및 취미에서 얻은 데이터는 모두 csv 파일에서 읽습니다. txt 상자에 원하는 데이터를 표시하기 위해 하나의 ID를 정확히 선택하는 방법은 무엇입니까?
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) ==
}
}
}
}
}
두 번째 파일
using System;
using System.Collections.Generic;
using System.Text;
namespace StudentInformation
{
class ID
{
string Id;
string FirstName;
string LastName;
string Hobby;
public ID(string eId,string eFirstName, string eLastName, string eHobby)
{
Id = eId;
FirstName = eFirstName;
LastName = eLastName;
Hobby = eHobby;
}
public override string ToString() => $"{Id}";
}
}
답변
백엔드에 사전을 설정할 수 있습니다. 드롭 다운에서 선택한 항목이 Dictionary <string, ID> (csv 구문 분석시 설정)의 키가됩니다.
그런 다음 목록 상자 색인에서 코드를 변경하면 다음과 같이 할 수 있습니다.
if(string.IsNullOrWhiteSpace(listbox1.Text))
{
//clear textboxes here
}
else
{
var student = studentDictionary[listbox1.Text];
//populate textboxes here
}
그러나 약간의 일반적인 코딩 팁은 클래스 및 개체 명명 규칙에 따라 작동합니다. 클래스 이름을 'ID'로 지정하지 마십시오. 클래스가 ID를 나타내더라도 ID가 모든 곳에서 속성으로 사용되므로 더 구체적으로 지정하십시오. 이 프로젝트에 대해 얼마나 관심이 있는지에 따라 csv를 사전에로드 할 때 중복 학생, 빈 값이있는 학생 또는 빈 csv 행이로드되지 않았는지 확인하기 위해 몇 가지 검사를 수행 할 수도 있습니다. ID를 공용 클래스로 만들고 필드도 공용으로 만듭니다.
편집하다:
dropdownstyle dropDownList를 사용하여 콤보 상자로 전환하는 것을 고려할 수도 있습니다. 상황에 더 적합 할 수 있습니다.
을 정의하고 List<ID>
LINQ를 통해 해당 항목을 쿼리 할 수 있습니다 .
게다가 클래스에 해당 속성을 정의해야합니다 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;
}