2015-10-19 64 views
2

我知道如何添加/删除项目,但我不知道如何将更多项目添加到同一字段(同一行和同一列)。我希望每当我点击一个按钮时,一个项目被添加到同一个选定的行,而不是添加到listView中的新行。 我上传了一张照片,你可以查看我的确切含义。在列表视图中添加更多项目到同一行和同一列

enter image description here

+0

\ n是制作新行的转义字符,尝试在它们之间添加\ n字符串 – Scriven

+0

请向我们展示您到目前为止的内容。否则,我们只会猜测,而我在猜测时很可怕。 – theB

回答

0

我没有太多的事情要继续下去。但是,这增加了一个新行:

string[] row = { "1", "snack", "2.50" }; 
var listViewItem = new ListViewItem(row); 
listView1.Items.Add(listViewItem); 

这里有一个帖子讨论如何更新现有的列表项: C#: How do you edit items and subitems in a listview?

+0

嗨。感谢您的答复。我想你的代码,这个代码只是增加了新的项目,新行:(但不能在同一行,因为我想要的,所以请尽量如果你能帮忙,谢谢 – naouf

+0

这是的WinForms DataGridView的? –

+0

不,这是一个列表视图。 – naouf

1

考虑看着ObjectListView或DataGridView的,而不是你是什么目前。它可能对您的需求更加灵活。

你的问题有点不清楚。显然你使用的是listView,并且你有列和行产生一个单元格/框/网格位置。我收集了它,在它最初创建之后,您希望追加或更改该位置的数据。

为了说明问题:不支持给定“单元格”内的多行文本(尽我所知)。您显示的图片可能是一个自定义对象或类似于listView的东西,但是不同(例如ObjectListView)。或者也许是一张图片。

listView2.Items[0].SubItems[4].Text = "123\nabc"; //Doesn't add a proper newline like a normal string 

listView2.Items[0].SubItems[4].Text = "123\rabc"; //Doesn't add a proper return carriage like a normal string 

listView2.Items[0].SubItems[4].Text = "123\r\nabc"; //Doesn't add a proper newline like a normal string 

我假设你正在使用的详细信息视图

listView1.View = View.Details; 

首先将你的头,listView1.Columns.Add(文字,宽度);

listView1.Columns.Add(First Name", 50); 
listView1.Columns.Add("Middle Name", 100); 
listView1.Columns.Add("Last Name", 100); 

然后,您将数据添加到listView。但是,这不是直接完成的。你建立一个listViewITEM然后将该项目添加到列表视图。

string[] row = new string[3]; 
row[0] = "john"; 
row[1] = "someone"; 
row[2] = "doe"; 

ListViewItem lvi = new ListViewItem(row); 

listView1.Items.Add(item); 

listView1.SelectedItems [#]子项目[#]文本= “字符串” + “\ n” + “字符串2”。;

CrazyPaste建议添加一行,这可能是实用的,并且是您经常用listViews看到的东西。 但是,如果您选择添加或“重做”这些行,请确保在输入新信息之前删除任何旧信息以避免重复。 从弹出采取在Visual Studio中2013亲

listView1.Items.RemoveAt(int index) 
listView1.Items.Insert(int index, string key, string text, int imageIndex) 

OR

listView1.Items.Clear(); //Clears all items 

然后

//Add populate logic here 

两个阵列,或者如果你想填充在一个循环中多维数组将是有效的这种方式的列表视图。

要以编程方式实现此目的,您可以......

 listView2 = new ListView(); 
     listView2.View = View.Details; 
     listView2.Location = new Point(50, 50); 
     listView2.Size = new Size(400, 100); 

     this.Controls.Add(listView2); 

     listView2.Columns.Add("AAA"); 
     listView2.Columns.Add("BBB"); 
     listView2.Columns.Add("CCC"); 
     listView2.Columns.Add("DDD"); 
     listView2.Columns.Add("EEE"); 

     ListViewItem item1 = new ListViewItem(); 
     item1.Text = "0"; //The way to properly set the first piece of a data in a row is with .Text 
     item1.SubItems.Add("1"); //all other row items are then done with .SubItems 
     item1.SubItems.Add("2"); 
     item1.SubItems.Add("3"); 
     item1.SubItems.Add(""); 
     item1.SubItems.Add(""); 

     ListViewItem item2 = new ListViewItem(); 
     item2.Text = "00"; 
     item2.SubItems.Add("11"); 
     item2.SubItems.Add("22"); 
     item2.SubItems.Add("33"); 
     item2.SubItems.Add(""); 
     item2.SubItems.Add(""); 

     ListViewItem item3 = new ListViewItem(); 
     item3.Text = "000"; 
     item3.SubItems.Add("111"); 
     item3.SubItems.Add("222"); 
     item3.SubItems.Add("333"); 
     item3.SubItems.Add(""); 
     item3.SubItems.Add(""); 

     //item1.SubItems.Clear(); 
     //item1.SubItems.RemoveAt(1); 
     listView2.Items.Add(item1); 
     listView2.Items.Add(item2); 
     listView2.Items.Add(item3); 
     //listView2.Items.Insert(2, item1); //0 here is the row. Increasing the number, changes which row you are writing data across 


     listView2.Items[0].SubItems[4].Text = "123\rabc"; 

'更新' 的信息:

listView1.Items.Clear(); 
listView1.Items.Add(item1); 
listView1.Items.Add(item2); 

...等

注:

  • 我是不是能够得到.Insert与子项工作。
  • 如果您已经插入了listView项目,您无法先插入项目
  • 子项目不会自动创建以填充空白空间。类似'listView2.Items [0] .SubItems [4] .Text'的命令将无法使用空/不存在子项
+0

嗨Branden,谢谢你的回复。是的,我使用了listView,并且我有列和行导致了一个单元格,我想在同一个单元格中插入一个多行。没有工作,所以你说多行不支持?你知道任何其他工具可以做我想要的吗?请让我知道。 – naouf

0

好的。在我搜索互联网的年龄后,事实证明listView不支持文本换行。所以我使用了DataGridView。感谢您的帮助

相关问题