更新列表框项

时间:2011-10-12 16:58:47

标签: c#

我想从我的程序中选择一个列表框项然后更新它。我有一个列表ecoItems.Eco是一个有2个存储变量的类,一个字符串和一个双变量.SetEcoValues是一个集合方法取两个值,一个字符串和一个double.i尝试此代码,但不要改变任何东西。任何建议?

         private void Update_Click(object sender, EventArgs e)
    {


            Eco y;
            y = ecoItems.ElementAt<Eco>(listBox1.SelectedIndex);
            y.SetEcoValues(textBox1.Text,Convert.ToDouble(textBox2.Text));
            listBox5.Items.Insert(listBox1.SelectedIndex, y);
        }


    }

2 个答案:

答案 0 :(得分:1)

你实际上并没有在任何地方获取ListItem,并试图向ListBox中添加一些不是ListItem的东西。你可以尝试这样的事情:

ListItem Item = listBox1.SelectedItem;

//Update the Text and Values
Item.Text = textBox1.Text,;
Item.Value = textBox2.Text;

或者......如果你有ListBox绑定到你的Ecos列表并希望它更新,而不是listBox5.Items.Insert ...你需要重新绑定它。

listBox5.DataSource = y;
listBox5.DataBind();

答案 1 :(得分:1)

使用你的代码和我猜的是你的课程,我会做这样的事情:

class Eco {
  public Eco() { }
  public void SetEcoValues(string text, double value) {
    Text = text;
    Value = value;
  }
  public string Text { get; set; }
  public double Value { get; set; }
  public override string ToString() {
    if (!String.IsNullOrEmpty(Text)) {
      return Text;
    }
    return base.ToString();
  }
}

ListView listView1; // initialized somewhere, I presume.

void Update_Click(object sender, EventArgs e) {
  if ((listView1.SelectedItems != null) || (0 < listView1.SelectedItems.Count)) {
    ListViewItem item = listView1.SelectedItems[0];
    Eco y = item.Tag as Eco;
    if (y == null) {
      y = new Eco();
    }
    y.SetEcoValues(textBox1.Text, Convert.ToDouble(textBox2.Text));
    item.Text = y.Text;
    if (item.SubItems.Count < 2) {
      item.SubItems.Add(y.Value.ToString());
    } else {
      item.SubItems[1].Text = y.Value.ToString();
    }
    item.Tag = y;
  }
}