在listview中向同一行和同一列添加更多项目

时间:2015-10-19 20:32:12

标签: c#

我知道如何添加/删除项目,但我不知道如何将更多项目添加到同一个字段(同一行和同一列)。我想每当我点击一个按钮时,一个项目被添加到相同的选定行但不会添加到listView中的新行。 我上传了一张你可以查看的照片,看看我究竟是什么意思。

enter image description here

3 个答案:

答案 0 :(得分: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(text,width);

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 [#] .SubItems [#]。Text =" string" +" \ n" +" string2&#34 ;;

CrazyPaste建议添加一行,这可能很实用,而且你经常会看到listViews。 但是,如果您选择添加或"重做"在输入新信息之前,请务必删除所有旧信息,以避免重复。 摘自visual studio 2013 pro中的弹出窗口

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);

...等

注意:

  • 我无法获得。插入使用子项目。
  • 如果您已插入listViewItem,则无法插入项目 没有先删除它
  • 不会自动创建子项以填充空白区域。命令如' listView2.Items [0] .SubItems [4] .Text'不适用于null /不存在的SubItems

答案 1 :(得分:0)

我没有太多可继续的事情。但这增加了一个新行:

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

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

答案 2 :(得分:0)

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