c# - 将更多项目添加到 ListView 中的同一行和同一列

标签 c#

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

enter image description here

最佳答案

考虑查看 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

我假设您正在使用详细信息 View

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,然后将该项目添加到 ListView 中。

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 = "字符串"+ "\n"+ "字符串2";

CrazyPaste 建议添加一行,这可能很实用,并且是您在 listView 中经常看到的内容。 但是,如果您选择添加或“重做”行,请务必在输入新信息之前删除所有旧信息,以避免重复。 取自 Visual Studio 2013 Pro 内的弹出窗口

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

或者

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

然后

//Add populate logic here

如果您希望以这种方式填充 ListView ,则循环中的两个数组或多维数组将是有效的。

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

        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 来处理子项。
  • 如果您已经插入了listViewItem,则无法插入项目 无需先将其删除
  • 不会自动创建子项来填充空白空间。诸如“listView2.Items[0].SubItems[4].Text”之类的命令不适用于空/不存在的子项

关于c# - 将更多项目添加到 ListView 中的同一行和同一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223392/

相关文章:

c# - 大 O 符号和算法

c# - IEnumerable类型中的最佳方式访问元素

javascript - onclick 事件不工作 asp.net

c# - 是否可以抛出 MessageQueueException?

c# - Awesomium Webview Surface 到字节缓冲区或 PictureBox

c# - Web 应用程序中的 Newtonsoft.Json 6.0.0.0 和 12.0.0.0 与 Web Api、C# 发生冲突

c# - MethodBase.GetCurrentMethod()反射线解释

c# - JSON 映射到 C# 类

c# - 什么会导致等待游标在它应该恢复到默认值之前恢复到默认值?

c# - 验证 FQDN 的正则表达式