0

列を含む .csv ファイルがあります。ユーザーがこの .csv ファイルに情報を挿入して保存できるフォームが既にあります。

別のフォームで、アイテム ID でアイテムを選択する機能を作成しました。.csv ファイルからアイテム ID のドロップダウンを表示するコンボボックスがあります。現在、アイテム ID は 1000 ~ 1003 のみです。

    public void Items()
    {
        int itemID = 0;
        Inventory[] IArray = Inventory.getInv();
        for (int v = 0; v < IArray.Length; v++)
        {
            if (IArray[v] != null)
            {
                itID = IArray[v].getIID();
                Field.Items.Add(itID + "\r\n");
            }
        }
    }

特定のアイテム ID を選択すると、ファイルに従って適切な名前/割引/価格で読み取り専用テキスト ボックスを更新したいと考えています。問題は、選択した ID に関係なく、.csv ファイルの最後の行が表示されることです (現在、最後の行はアイテム ID 1003 です)。

    private void Field_SelectedIndexChanged(object sender, EventArgs e)
    {
        string itName = "";
        double disc = 0;
        double price = 0;
        Inventory[] IArray = Inventory.getInv();
        for (int v = 0; v < IArray.Length; v++)
        {
            if (IArray[v] != null)
            {
                itName = IArray[v].getItName();
                disc = IArray[v].getDisc();
                price = IArray[v].getPrice();

                itNameS.Text = (itName);
                itPriceS.Text = Convert.ToString(price);
                itDiscountS.Text = Convert.ToString(disc);
            }
        }
    }
4

2 に答える 2

2

次のようなアイテムのリストを利用して、コンボボックスにバインドできます。次に、変更されたインデックスのテキスト ボックスのテキスト値を設定できます。

私のプロパティはあなたのものと正確には一致しませんが、インデックスを変更するたびにアイテムを取得する必要がないため、時間を節約できます。

class Item : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string info)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(info));
    }

    private string _itemId;
    public String ItemID
    {
        get { return _itemId; }
        set { _itemId = value; NotifyPropertyChanged("ItemID"); }
    }

    private string _itemName;
    public String ItemName
    {
        get { return _itemName; }
        set { _itemName = value; NotifyPropertyChanged("ItemName"); }
    }

    private double _discountValue;
    public Double DiscountValue
    {
        get { return _discountValue; }
        set { _discountValue = value; NotifyPropertyChanged("DiscountValue"); }
    }

    private double _price;
    public Double Price
    {
        get { return _price; }
        set { _price = value; NotifyPropertyChanged("Price"); }
    }
}


public partial class Form1 : Form
{
    BindingList<Item> OurItems = new BindingList<Item>();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        PopulateItems();
        BindComboBox();


    }

    private void BindComboBox()
    {
        cboItems.DataSource = OurItems;
        cboItems.DisplayMember = "ItemID";
        cboItems.ValueMember = "ItemID";
    }

    private void PopulateItems()
    {
        StreamReader sr = new StreamReader(@"New Text Document (4).txt");
        foreach (string sLine in sr.ReadToEnd().Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries ))
        {
            var oProps = sLine.Split(new char[] {','});
            OurItems.Add(new Item() {ItemID = oProps[0], ItemName = oProps[1], DiscountValue = Double.Parse(oProps[2]), Price = Double.Parse(oProps[3])});
        }
    }

    private void cboItems_SelectedIndexChanged(object sender, EventArgs e)
    {
        var oSelected = (Item)cboItems.SelectedItem;

        tbName.Text = oSelected.ItemName;
        tbDiscount.Text = oSelected.DiscountValue.ToString();
        tbPrice.Text = oSelected.Price.ToString();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        OurItems[0].Price = OurItems[0].Price + 50;
    }
}

ここに画像の説明を入力

于 2012-12-11T00:54:21.423 に答える