【问题标题】:datagridview data to list, then binding listbox to list, doesnt work?datagridview 数据到列表,然后将列表框绑定到列表,不起作用?
【发布时间】:2017-03-12 17:22:49
【问题描述】:

我不知道这里出了什么问题,所以 listBox 是空的,而不是里面有一个列表?(可能很容易解决,但我自己还不能解决)

public List<Karta> ubaciUListu()
{
      List<Karta> Lista1 = new List<Karta>();
      foreach (DataGridViewRow row in dataGridView1.Rows)
      {

          Karta k = new Karta(0,"","");
          // k.Id =(int)row.Cells[0].Value;
          k.Pojam =(string) row.Cells[1].Value;
          k.Opis = (string)row.Cells[2].Value;

          Lista1.Add(k);


      }
      return Lista1;
  }

  private void btnNovaF_Click(object sender, EventArgs e)
  {
      //ubaciUListu();
      this.Hide();
      Form2 f2 = new Form2();
      f2.ShowDialog();

  }

首先,我从 dgv 中的数据创建列表(请参阅此处 data in dgv) 然后我试图将 listBox 绑定到这个 List

public Form2()
    {
        InitializeComponent();
        Form1 f1 = new Form1();
        List<Karta> nova = f1.ubaciUListu();
        if(nova.Count!=0)
        { 
        lstBox.DataSource = nova;
        }
    }

希望这对发现问题有足够的帮助。谢谢!

【问题讨论】:

  • 正如 Sajeetharan 指出的那样,下划线问题是您正在 Form2 构造函数中构造一个新的 Form1 ......其中 Form1.DataViewList1 (控制)为空。
  • 我的意思是...其中f1.DataGridView1(控制)为空。

标签: c# list datagridview


【解决方案1】:

当你创建一个form1的新实例时,现有的列表将被清除,

 Form1 f1 = new Form1();
 List<Karta> nova = f1.ubaciUListu();

更好的方法是在打开时将其传递给第二个表单,

 Form2 f2 = new Form2(Lista1);

你的form2应该是,

List<Karta> nova = new List<Karta>();
public Form2(List<Karta> input)
   {  
     nova = input;
   }
}

【讨论】:

  • hmm.. 这是部分正确的.. 不过在按钮单击范围内分配给 f2.DataSource 可能更好。
  • 正如 Sajeetharan 所说,“在创建 form1 的新实例时,现有列表将被清除”。答案很棒而且很有帮助,只是为了学习,我在想,而不是放在 Form1 的新实例和 List nova = f1.ubaciUListu(); 之间,这一行:f1.ubaciUListu();。我看到它不起作用,但我认为列表会再次满员?为什么不是现在?
  • @mike_cus,你应该避免在Form2的构造函数中创建Form1的新实例。这里的第一个代码sn-p描述了问题所在,最后一个描述了@ 987654326@ 构造函数将List&lt;Karta&gt; 的现有实例作为参数分配给Form2 上定义的字段;出于您的目的:您还需要分配给DataSource。所以在nova = input;之后添加行DataSource = nova;
  • 我明白了。我写是为了学习,除了我已经在我的小项目中实现的他的答案,我想知道为什么 f1.ubaciUListu()(因为问题是:当你创建一个新的 form1 实例时,现有列表将被清除, ) 也不能解决问题(如果该行在第一个 sn-p 的两行之间),因为我检查过它不会。但是,感谢您的努力! :)
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2011-07-10
  • 2014-01-13
  • 2011-05-07
相关资源
最近更新 更多