C#读取多个文本文件,将行拆分为列表,然后加载到ListBox

C#读取多个文本文件,将行拆分为列表,然后加载到ListBox,c#,list,listview,combobox,C#,List,Listview,Combobox,我得到了一些错误,而且我的代码还没有完成。我使用了另一个Stackoverflow问题来设置它,但它不适合我的需要 我有三个文本文件,数据用逗号分割,例如“Name,25,25.6”,所以字符串,int,decimal。我有三个文本文件,它们都有三列,数据类型相同,但名称/编号不同 我有三个不同的列表框,我想把它们分成三个,但是我很难把三个不同的列表项分成三个不同的列表框。我将复制并粘贴我所有的代码。我还使用了一个组合框,允许用户选择他们想要加载到组合框中的文件,我相信这是正确的 我得到的错误在

我得到了一些错误,而且我的代码还没有完成。我使用了另一个Stackoverflow问题来设置它,但它不适合我的需要

我有三个文本文件,数据用逗号分割,例如“Name,25,25.6”,所以字符串,int,decimal。我有三个文本文件,它们都有三列,数据类型相同,但名称/编号不同

我有三个不同的列表框,我想把它们分成三个,但是我很难把三个不同的列表项分成三个不同的列表框。我将复制并粘贴我所有的代码。我还使用了一个组合框,允许用户选择他们想要加载到组合框中的文件,我相信这是正确的

我得到的错误在DisplayList()中,它在lstItemName.DataSource=Inventory上显示;行,表明库存在当前上下文中不存在。还有大量其他错误

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


{
公共部分类frmInventory:表单
{
公共财政
{
初始化组件();
}
字符串cstrItemName;
int cintNumberOfItems;
十进制cdecPrice;
十进位价格;
字符串selectedList=“”;
私有无效组合框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
selectedList=this.cmbList.GetItemText(this.cmbList.SelectedItem);
if(selectedList==“创造性构造”)//如果所选组合
框项等于所选的确切字符串
{
selectedList=“creative”//则字符串等于creative,
这是creative.txt,但我在btnLoadInfo方法中添加了.txt
}else if(selectedList==“天堂大厦”)
{
selectedList=“paradise”//这是针对paradise.txt的
}
else if(selectedList==“Sitler构造”)
{
selectedList=“sitler”//这是针对sitler.txt的
}
其他的
{
MessageBox.Show(“请选择其中一项”);
}
}
私有void btnLoadInfo_单击(对象发送者,事件参数e)
{
列表库存=新列表();
使用(StreamReader invReader=新StreamReader(selectedList+
“.txt”))
{
while(invReader.Peek()>=0)
{
字符串str;
字符串[]strArray;
str=invReader.ReadLine();
strArray=str.Split(',');
frmInventory currentItem=新frmInventory();
currentItem.cstrItemName=strArray[0];
currentItem.cintNumberOfItems=int.Parse(strArray[1]);
currentItem.cdecPrice=decimal.Parse(strArray[2]);
存货。添加(当前项目);
}
}
显示列表();
}//btnLoadInfo结束
void displayLists()
{
int i;
lstItemName.Items.Clear();
lstNumberOfItems.Items.Clear();
lstPrice.Items.Clear();
lstotalprices.Items.Clear();
lstItemName.DataSource=库存;
lstItemName.ValueMember=“cstrItemName”;
lstItemName.DisplayMember=“cintNumberOfItems”;
}
}//破产结束
}//命名空间结尾

我不知道这是否正是您所需要的,但请尝试以下方法:

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; }
}
公共部分类表单2:表单
{
列出存货清单;
公共表格2()
{
初始化组件();
}
公共void ReadFiles()
{
如果(库存==null)
库存=新列表();
使用(TextReader r=new StreamReader(“file.txt”))
{
字符串行=null;
而((line=r.ReadLine())!=null)
{
string[]fields=line.Split(',');
存货obj=新存货();
对象名称=字段[0];
obj.Qtd=Convert.ToInt32(字段[1]);
对象价格=转换为32(字段[2]);
存货.增加(obj);
}
}
SetDataSourceList();
}
public void SetDataSourceList()
{
listBox1.DisplayMember=“Name”;
listBox2.DisplayMember=“Qtd”;
listBox3.DisplayMember=“价格”;
listBox1.DataSource=
listBox2.DataSource=
listBox3.1数据源=
库存
}
}
公共类目录
{
公共字符串名称{get;set;}
公共int Qtd{get;set;}
公共十进制价格{get;set;}
}

您是否创建了表单列表?我实际上是在大约10分钟前自己计算出来的,但我非常感谢您的回复,我执行了{get;set}并将数据源重置为null,这很有效!再次感谢:)
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; }
}