2015-09-07 76 views
1

与此密切相关,但仍然失败。只需添加combobox1项目多次然后更改。 Combobox2会正确添加到cbo1的每个条目中。 还添加了分隔符,在MyFile.txt的前一行 我加载这个分裂没有问题,回去是麻烦 我很喜欢新的真正新的C#。C#将2个comboBox添加到csv文本文件

StreamWriter OutFile = new StreamWriter("MyFile.txt",false); 

foreach(object L in comboBox1.Items) 
foreach(object M in comboBox2.Items) 
{ 
    string lineoftext1 = (L.ToString()); 

    string lineoftext2 = (","); 

    string lineoftext3 = (M.ToString()); 

    string joinedText; 
    joinedText = String.Join(lineoftext1, lineoftext2, lineoftext3); 
    //MessageBox.Show(joinedText); 

    OutFile.WriteLine(joinedText); 
} 

OutFile.Close(); 
+3

能否请你解释清楚,什么输出刚才添加combobox1你期待?您当前的代码给出组合框1和组合框2中的项目的不同组合。 – Tejus

+0

是的,它们是不同的。一个是一个名字,不管你是什么名字,第二个是注册表项。它不应该。如何使用分隔符将2个组合框导出到txt文件。他们应该像彼此同步,如名称,地址类型,在谷歌,你什么都没有得到 – veeger

+0

我想Tejus说的是,根据你的意思,你给的代码是正确的。 (我看不出有什么问题),它应该返回(假设每个盒子里有2个项目)L1,M1 | L1,M2 | L2,M1 | L2,M2是不是你所得到的?如果不是,你期望看到什么? – Nikerym

回答

0

OOOOH,我看这个问题,它在你正在处理你的字符串的方式,你不使用的string.join这种方式,你可以明确地加入他们这样的:

joinedText = lineoftext1 + lineoftext2 + lineoftext3; 

,或者你需要创造的东西,join方法接受,我会用一个列表,这样你的foreach循环的内部看起来像这样

List<string> mystrings = new List<string>(); 
mystrings.add(L.ToString()); 
mystrings.add(M.ToString()); 

joinedText = String.Join(",", mystrings); 

alternativly你可以离开它你拥有它,但改变周围的

joinedText = String.Join(lineoftext2, lineoftext1, lineoftext3); 

一些值传递给的string.join的第一个参数是分隔符。你正在传递文本。

如果这没有帮助,那么我会希望看到您的预期输出,正如我在上面的评论中提到的。

编辑:如果你想有一个1-1 2-2风格

int i = 0; 

foreach (object M in comboBox1.Items) 
     { 

      List<string> mystrings = new List<string>(); 

      mystrings.Add(comboBox2.Items[i].ToString()); 
      mystrings.Add(M.ToString()); 

      OutFile.WriteLine(String.Join(",", mystrings)); 
      i++; 

     } 

只是知道试试这个,如果在每个组合框的项目数不同,这将错误。 (你会得到一个外部数组边界错误)

+0

你真正接近它把分隔符,它应该是,但仍然加入CBO1多次第一个项目,然后冲洗重复 _Wow6432Node是combobox1 __Wow6432Node的第一项,计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node __Wow6432Node,电脑\ HKEY_LOCAL_MACHINE \ HARDWARE \ DESCRIPTION \ SYSTEM \ BIOS __Wow6432Node,电脑\ HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制 让我尝试添加其他 – veeger

+0

错误“System.Collections.Generic.List '不包含'add'的定义,并且没有接受'System.Collections.Generic.List'类型的第一个参数的扩展方法'add'可能是f ound – veeger

+0

所以总是只有每个组合框的物品?就像M1,L1 |一样M2,L2 | M3,L3?您编写代码的方式是,将从第一个组合框中获取第一个项目,然后遍历第二个组合框,然后从第一个组合框中获取第二个项目并遍历它,如果您想要1-1匹配,然后取出其中一个foreach并使用索引。 – Nikerym

0

我不知道,我想在你的combobox1,当一个回做相同的项目添加,所以它重复回combobox1甚至没有任何变化combobox2发生。如果这是你的问题,你可以通过里面添加代码,if (!IsPostBack),这样的事情解决这个问题,

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     //write you code here 
    } 
} 
0

Nikerym你得到它的人,我下面 129线因为是原 由于M8

 StreamWriter OutFile = new StreamWriter("MyFile.txt", false); 

     int i = 0; 

     foreach (object M in comboBox1.Items) 
     { 

      List<string> mystrings = new List<string>(); 
      mystrings.Add(comboBox1.Items[i].ToString()); 
      mystrings.Add(comboBox2.Items[i].ToString()); 


      OutFile.WriteLine(String.Join(",", mystrings)); 
      i++; 

     } 

     OutFile.Close(); 
+0

我认为你将combobox 1的值增加了两次?这会看起来像M1,L1,M1 | M2,L2,M2等,如果你只想要M1,L2然后删除这行myst​​rings.Add(M.Tostring());或者mystrings.Add(comboBox1.Items [i] .ToString()); ....当我输入这个时你刚编辑过的;) – Nikerym