我有一个C#程序,我正在用它读取CSV文件。使用StreamReader,我用CSV的内容填充组合框。CSV包含4个字段。我只想显示所选行中的第一个值。然后,我想将其他字段中的2个传递给另一个进程(我正在尝试按位置映射网络打印机(。这是我阅读CSV的部分。
try
{
// Open the CSV file to read
StreamReader sr = new StreamReader(printerList);
String currentline = sr.ReadLine();
while (!sr.EndOfStream)
{
currentline = sr.ReadLine();
comboBoxPrinterList.Items.Add(currentline);
}
}
catch (Exception ex)
{
// Display an error message if the file cannot be read
MessageBox.Show("The file could not be read" + ex.Message);
}
这非常有效。唯一的问题是这行太长了,读不懂。最终用户只需选择位置,即第一个字段。
为了测试,我用这个代码来显示的结果
int selectedIndex = comboBoxPrinterList.SelectedIndex;
Object selectedItem = comboBoxPrinterList.SelectedItem;
MessageBox.Show("Selected Item Text: " + selectedItem.ToString() + "n" +
"Index: " + selectedIndex.ToString());
有没有一种方法可以只显示组合框中的第一个字段,但仍然使用从组合框控件传递的索引号?我想创建一个只有第一个字段的数组,但不知道如何引用数组和组合框索引。
任何帮助都是非常感激的。。。。
如果我正确理解你的问题,你似乎可以使用string.split()
将行分解为必要的字段进行显示,然后像你已经做的那样引用组合框的选定索引。
try
{
// Open the CSV file to read
StreamReader sr = new StreamReader(printerList);
String currentline = sr.ReadLine();
while (!sr.EndOfStream)
{
currentline = sr.ReadLine();
// Break line into separated fields
String[] fields = currentline.split(',');
comboBoxPrinterList.Items.Add(fields[0]);
}
}
catch (Exception ex)
{
// Display an error message if the file cannot be read
MessageBox.Show("The file could not be read" + ex.Message);
}
实际上,在rbrettj的帮助下,这对我很有效。通过拆分这些值,我可以用我需要的东西填充组合框。我还需要能够读取文件中的其他值,因此快速重新读取文件使我能够匹配第一次读取的值并获得所需的值。
这对我有效:
// Open the CSV file to read
StreamReader sr = new StreamReader(printerList);
String currentline = sr.ReadLine();
while (!sr.EndOfStream)
{
// Read each line of CSV file
currentline = sr.ReadLine();
// Break line into separated fields
string[] fields = currentline.Split(',');
string region = fields[0];
string server1 = fields[2];
string server2 = fields[3];
if (officeLocation == region) {
MessageBox.Show("Region: " + region + "n" +
"Server1: " + server1 + "n" +
"Server 2: " + server2);
break;
}
}
我对数组的了解充其量是不稳定的,所以重新读取数组并为服务器位置赋值会让我离得足够近。
感谢大家的帮助和指导。