【问题标题】:Can't add items to my ListView无法将项目添加到我的 ListView
【发布时间】:2012-08-13 16:24:56
【问题描述】:

我在一个 C# 程序中有一个三列 ListView(这些列是使用 Visual Studio 设计器定义的),我试图用另一个表单中的数据填充它,我尝试使用位于同一类中的这个函数作为 ListView(Input 类),但从另一种形式(HandleData 类)的按钮的单击事件中调用。

public void agregarALista(string label, string longitud,string cantidad)
{
   ListViewItem i = new ListViewItem(label);
   i.SubItems.Add(longitud);
   i.SubItems.Add(cantidad);
   listView1.Items.Add(i);
}

在调试时,我可以看到它执行了这些行,因此调用正常,但没有数据添加到我的 listView1。

你认为这可能是什么?

这是另一种形式的调用函数,位于 HandleData 类中:

 private void button1_Click(object sender, EventArgs e)
 {
   Input agregarView = new Input();
   double dOutput = 0;
   if (Double.TryParse(textBox2.Text,out dOutput))
   {
      agregar.agregarLista(textBox1.Text, textBox2.Text, textBox3.Text);

      agregarView.agregarALista(textBox1.Text, textBox2.Text, textBox3.Text);
      if (MessageBox.Show("Continuar agregando?","Otra orden", MessageBoxButtons.YesNo) == DialogResult.Yes)
      {
        textBox1.Clear();
        textBox2.Clear();
        textBox3.Clear();
      }
      else
      {
         this.Dispose();
         this.Close();
      }
   }
   else
   {
     MessageBox.Show("No es una Longitud Valida");
     textBox2.Clear();
   }            
  }

【问题讨论】:

  • 你试过打电话给listView1.Refresh();吗?
  • 你能发布设置列表视图的代码吗?在尝试添加项目之前,您是否在列表视图中添加了列?
  • 嗨,我使用 Visual Studio 设计编辑器添加了列,甚至尝试使用硬编码字符串在同一个类中调用该函数,并且它有效,我真正的问题是,我该如何调用它另一个类的函数,以便它能够修改 listView1?

标签: c# .net winforms listview


【解决方案1】:

仅当您在 ListView 中定义了 Columns 并且您将 ListView 的 View 设置为 View.Details 时,ListView 的 SubItems 才能工作

// Set to details view.
listView1.View = View.Details;
// Add a column with width 20 and left alignment.
listView1.Columns.Add("longitud", 20, HorizontalAlignment.Left);
listView1.Columns.Add("candidat", 20, HorizontalAlignment.Left);
//... and so on

查看link 了解如何以编程方式添加列并使用子项填充的完整图片(它还使用 ListView.BeginUpdate() 和 ListView.EndUpdate() 方法,这些方法可以防止每次添加多个项时重绘列表视图添加项操作)。

更新:
由于在Form 2中添加ListViewItems,为了能够更新Form 1的listView1,您需要在Form 2中创建和事件(添加ListViewItems)并在Form 1中处理该事件(事件处理程序)。 查看StackOverflow question了解更多详情。

【讨论】:

  • 嗨,我使用 Visual Studio 设计编辑器添加了列,甚至尝试使用硬编码字符串在同一个类中调用该函数,并且它有效,我真正的问题是,我该如何调用它另一个类的函数,以便它能够修改 listView1?
  • 啊!为此,您需要以第二种形式创建一个事件,并在第一种形式中为此事件创建一个事件处理程序。检查这个link
  • +1,我花了很多时间来解决“无法将项目插入ListView”问题,我的代码看起来很完美,但是当我看到你的答案时,我知道我缺少这一行: listView1.View = View.Details;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多