#c# #winforms
#c# #winforms
Вопрос:
Я пытаюсь отобразить элемент из CSV-файла в listbox (эта часть работает), а затем отобразить отдельные части этого элемента в отдельных ярлыках.
public partial class InventoryForm : Form
{
public InventoryForm()
{
InitializeComponent();
}
public List<ItemsList> itemsLists(string csvPath)
{
var query = from l in File.ReadAllLines(csvPath)
let data = l.Split('|')
select new ItemsList
{
Name = data[0],
Type = data[1],
DMGTyp = data[2],
DMG = data[3],
Weight = int.Parse(data[4]),
Price = int.Parse(data[5]),
Description = data[5]
};
return query.ToList();
}
private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog filePath = new OpenFileDialog();
filePath.ShowDialog();
textBox1.Text = filePath.FileName;
}
private void btnLoad_Click(object sender, EventArgs e)
{
listBox1.DataSource = itemsLists(textBox1.Text);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//to do show individual pieces in labels
}
public class ItemsList
{
public string Name { get; set; }
public string Type { get; set; }
public string DMGTyp { get; set; }
public string DMG { get; set; }
public int Weight { get; set; }
public int Price { get; set; }
public string Description { get; set; }
}
}
Элементы разбиты на 6 частей, а в окне списка отображается только имя элемента, но я хочу, чтобы на ярлыке отображались остальные свойства элемента. Любые подсказки о том, как это сделать?
Комментарии:
1. Добавьте привязку к данным к меткам, установив привязку к соответствующему свойству
ItemsList
класса. ВыбранныйItemsList
объект возвращаетсяListBox.SelectedItem
. Кстати, вы отрезали некоторые фрагменты кода и оставилиItemsList
определение класса. Используйте BindingSource, чтобы связать вашиList<ItemsList>
объекты с источником данных ListBox и использовать его в качестве источника привязок к данным.2.
ItemList
создан ли класс вами? Вы должны создать переменные уровня формыList<ItemsList> items
и заполнить список из файла CSV… вы можете загрузить список,item
и когда пользователь выбирает элемент из списка, вы можете использовать запрос сitems
помощью LINQ, чтобы получить элемент на основе выбранного имени. а затем отобразите другие свойства этого элемента в метках.3. До этого момента я не играл с привязками данных в своем обучении. знаете ли вы какой-нибудь хороший источник для его изучения?
4. Объявите BindingSource как поле:
private BindingSource listSource = null;
… после того, как вы создали список …listSource = new BindingSource([Your List], null); listBox1.DisplayMember = "[The Name of the Property used to present the List]"; listBox1.DataSource = listSource; label1.DataBindings.Add("Text", listSource, "Name", false, DataSourceUpdateMode.OnPropertyChanged); label2.DataBindings.Add(...) [...]
. После этого все происходит автоматически, нет необходимости обрабатывать события.