2017-05-11 51 views
0

我收到了一些错误,并且我的代码还未完成。我正在使用另一个Stackoverflow问题来设置它,但它不适合我的需要。C#从多个文本文件中读取数据,将行分割成List,然后加载到列表框中

我有三个文本文件,其中数据被逗号分隔,如“Name,25,25.6”so string,int,decimal。我有全部三个文本文件,它们有三列,相同的数据类型,但只是不同的名称/数字。

我有三个不同的列表框,我想分割它们,但我无法获得三个不同的分割列表项进入三个不同的列表框。我将复制并粘贴我拥有的所有代码。我也使用组合框来允许用户选择他们想要加载到组合框的文件,我相信我已经做对了。

我得到的错误是在displayLists()中,它说lstItemName.DataSource = Inventory;库存在当前上下文中不存在的行。还有其他一些错误。

任何帮助将不胜感激,我会复制和粘贴我的代码。我有一个Windows窗体和我使用Visual Studio Express的2012年C#

namespace TCSCapstone 
{ 
public partial class frmInventory : Form 
{ 
    public frmInventory() 
    { 
     InitializeComponent(); 
    } 

    string cstrItemName; 
    int cintNumberOfItems; 
    decimal cdecPrice; 
    decimal cdecTotalPrices; 

    string selectedList = ""; 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     selectedList = this.cmbList.GetItemText(this.cmbList.SelectedItem); 

     if (selectedList == "Creative Construction")//if the selected combo 
box item equals the exact string selected 
     { 
      selectedList = "creative"; //then the string equals creative, 
which is creative.txt but I add the .txt in the btnLoadInfo method 
     } else if (selectedList == "Paradise Building") 
     { 
      selectedList = "paradise";//this is for paradise.txt 
     } 
     else if (selectedList == "Sitler Construction") 
     { 
      selectedList = "sitler";//this is for sitler.txt 
     } 
     else 
     { 
      MessageBox.Show("Please select one of the items."); 
     } 
    } 

    private void btnLoadInfo_Click(object sender, EventArgs e) 
    { 
     List<frmInventory> Inventory = new List<frmInventory>(); 
     using (StreamReader invReader = new StreamReader(selectedList + 
".txt")) 
     { 
      while (invReader.Peek() >= 0) 
      { 
       string str; 
       string[] strArray; 
       str = invReader.ReadLine(); 

       strArray = str.Split(','); 
       frmInventory currentItem = new frmInventory(); 
       currentItem.cstrItemName = strArray[0]; 
       currentItem.cintNumberOfItems = int.Parse(strArray[1]); 
       currentItem.cdecPrice = decimal.Parse(strArray[2]); 

       Inventory.Add(currentItem); 

      } 
     } 
     displayLists(); 
    }//end of btnLoadInfo 

    void displayLists() 
    { 
     int i; 
     lstItemName.Items.Clear(); 
     lstNumberOfItems.Items.Clear(); 
     lstPrice.Items.Clear(); 
     lstTotalPrices.Items.Clear(); 

     lstItemName.DataSource = Inventory; 
     lstItemName.ValueMember = "cstrItemName"; 
     lstItemName.DisplayMember = "cintNumberOfItems"; 
    } 

}//end of frmInventory 
}//end of namespace 
+0

你创造表格列表? –

回答

0

我不知道这是否是你所需要的东西,但尝试这样的事:

public partial class Form2 : Form 
{ 

    List<Inventory> inventory; 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public void ReadFiles() 
    { 
     if (inventory == null) 
      inventory = new List<Inventory>(); 

     using (TextReader r = new StreamReader("file.txt")) 
     { 
      string line = null; 
      while ((line = r.ReadLine()) != null) 
      { 
       string[] fields = line.Split(','); 
       Inventory obj = new Inventory(); 
       obj.Name = fields[0]; 
       obj.Qtd = Convert.ToInt32(fields[1]); 
       obj.Price = Convert.ToInt32(fields[2]); 

       inventory.Add(obj); 
      } 
     } 

     SetDataSourceList(); 


    } 

    public void SetDataSourceList() 
    { 
     listBox1.DisplayMember = "Name"; 
     listBox2.DisplayMember = "Qtd"; 
     listBox3.DisplayMember = "Price"; 
     listBox1.DataSource = 
      listBox2.DataSource = 
      listBox3.DataSource = 
      inventory; 
    } 



} 

public class Inventory 
{ 
    public string Name { get; set; } 
    public int Qtd { get; set; } 
    public decimal Price { get; set; } 
} 
+0

大约10分钟前我实际上已经知道了,但我非常感谢你的回复,我做了{get;设置},并将DataSources重置为null,即可以工作!再次感谢 :) –

相关问题