使用 BindingSource 将 CSV 加载到列表中
Loading CSV into List using BindingSource
我正在尝试使用 BindingSource 将包含 'Workstations' 列表的 csv 文件加载到列表中。这是我现在拥有的。
OpenFileDialog of = new OpenFileDialog();
List<Workstation> invList = new List<Workstation>();
BindingSource bs = new BindingSource();
bs.DataSource = invList;
listBox1.DisplayMember = "display";
public class Workstation
{
public string name { get; set; }
public string serviceTag { get; set; }
public string display
{
get
{
return name + " | " + serviceTag;
}
}
public string type { get;set; }
public string os { get; set; }
public string make { get; set; }
public string model { get; set; }
public int hd { get; set; }
public int ram { get; set; }
public string location { get; set; }
public string ip { get; set; }
public string notes { get; set; }
}
private void resume()
{
try
{
filePath = of.FileName;
var loadedWorkstation = new Workstation();
string[] line = System.IO.File.ReadAllLines(filePath);
List<string> doc = new List<string>();
for(int x = 0;x < line.Length; x++)
{
doc = line[x].Split(',').ToList();
loadedWorkstation.name = doc[0];
loadedWorkstation.serviceTag = doc[1];
loadedWorkstation.make = doc[2];
loadedWorkstation.model = doc[3];
loadedWorkstation.ram = Convert.ToInt32(doc[4]);
loadedWorkstation.hd = Convert.ToInt32(doc[5]);
loadedWorkstation.os = doc[6];
loadedWorkstation.location = doc[7];
loadedWorkstation.type = doc[8];
loadedWorkstation.ip = doc[9];
loadedWorkstation.notes = doc[10];
invList.Insert(0, loadedWorkstation);
bs.ResetBindings(false);
listBox1.DataSource = bs;
}
}
}
我遇到的问题是 csv 文件如下所示:
Dave's PC,19NMX32,Dell,Optiplex 2010,0,0,,Office Desk,,10.10.77.138,
Blake's PC,20NMX12,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.136,
John's PC,4NMX17,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.131,
Jake's PC,12NMX32,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.132,
当我加载它时,列表和列表框显示如下:
Dave's PC | 19NMX32
Dave's PC | 19NMX32
Dave's PC | 19NMX32
Dave's PC | 19NMX32
移动这条线
var loadedWorkstation = new Workstation();
循环内部
for(int x = 0;x < line.Length; x++)
{
doc = line[x].Split(',').ToList();
var loadedWorkstation = new Workstation();
loadedWorkstation.name = doc[0];
....
您当前的代码始终使用 Workstation
class 的相同实例。您为文件中的每一行重复添加相同的实例。
在循环中,您不构建新实例,而是更改创建的唯一 Workstation 实例的属性。这导致在循环结束时,这个孤独的实例等于加载的最后一行,并且您的列表显示每个项目的相同引用。
如问题下的评论所述,也许您也可以移动这些行
bs.ResetBindings(false);
listBox1.DataSource = bs;
循环外
我正在尝试使用 BindingSource 将包含 'Workstations' 列表的 csv 文件加载到列表中。这是我现在拥有的。
OpenFileDialog of = new OpenFileDialog();
List<Workstation> invList = new List<Workstation>();
BindingSource bs = new BindingSource();
bs.DataSource = invList;
listBox1.DisplayMember = "display";
public class Workstation
{
public string name { get; set; }
public string serviceTag { get; set; }
public string display
{
get
{
return name + " | " + serviceTag;
}
}
public string type { get;set; }
public string os { get; set; }
public string make { get; set; }
public string model { get; set; }
public int hd { get; set; }
public int ram { get; set; }
public string location { get; set; }
public string ip { get; set; }
public string notes { get; set; }
}
private void resume()
{
try
{
filePath = of.FileName;
var loadedWorkstation = new Workstation();
string[] line = System.IO.File.ReadAllLines(filePath);
List<string> doc = new List<string>();
for(int x = 0;x < line.Length; x++)
{
doc = line[x].Split(',').ToList();
loadedWorkstation.name = doc[0];
loadedWorkstation.serviceTag = doc[1];
loadedWorkstation.make = doc[2];
loadedWorkstation.model = doc[3];
loadedWorkstation.ram = Convert.ToInt32(doc[4]);
loadedWorkstation.hd = Convert.ToInt32(doc[5]);
loadedWorkstation.os = doc[6];
loadedWorkstation.location = doc[7];
loadedWorkstation.type = doc[8];
loadedWorkstation.ip = doc[9];
loadedWorkstation.notes = doc[10];
invList.Insert(0, loadedWorkstation);
bs.ResetBindings(false);
listBox1.DataSource = bs;
}
}
}
我遇到的问题是 csv 文件如下所示:
Dave's PC,19NMX32,Dell,Optiplex 2010,0,0,,Office Desk,,10.10.77.138,
Blake's PC,20NMX12,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.136,
John's PC,4NMX17,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.131,
Jake's PC,12NMX32,Dell,Optiplex 3020,0,0,,Office Desk,,10.10.77.132,
当我加载它时,列表和列表框显示如下:
Dave's PC | 19NMX32
Dave's PC | 19NMX32
Dave's PC | 19NMX32
Dave's PC | 19NMX32
移动这条线
var loadedWorkstation = new Workstation();
循环内部
for(int x = 0;x < line.Length; x++)
{
doc = line[x].Split(',').ToList();
var loadedWorkstation = new Workstation();
loadedWorkstation.name = doc[0];
....
您当前的代码始终使用 Workstation
class 的相同实例。您为文件中的每一行重复添加相同的实例。
在循环中,您不构建新实例,而是更改创建的唯一 Workstation 实例的属性。这导致在循环结束时,这个孤独的实例等于加载的最后一行,并且您的列表显示每个项目的相同引用。
如问题下的评论所述,也许您也可以移动这些行
bs.ResetBindings(false);
listBox1.DataSource = bs;
循环外