【问题标题】:Get the data from a column in a selected row从选定行的列中获取数据
【发布时间】:2013-03-02 10:40:22
【问题描述】:

我有 listView 与以下列名称和电子邮件与以下数据,如

NAME     EMAIL
adam     adam@gmail.com
james    james@gmail.com
kris     kris@gmail.com

我选择 james 行,现在在两个文本框中,我希望他们的姓名和电子邮件出现在那里 喜欢

textbox1 = james
textbox2 = james@gmail.com

我正在做的实际上是在form1 我有contextmenu 与项目更新。 点击updatecontextmenuform2textbox 姓名和电子邮件一起加载。 listview 包含如上所示的姓名和电子邮件。

我想将列表视图中选定行中的名称分别放在名称textbox 和电子邮件中。

我试过了。

updateToolStripMenuItem_Click(...)
{

    Form3 update = new Form3();
    update.ShowDialog();            
}

Form3_Load(...)
{
    Form1 f1 = new Form1();
    string oldName = f1.listView1.SelectedItems[0].SubItems[0].Text;
    string oldEmail = f1.listView1.SelectedItems[0].SubItems[0].Text;
    textBox1.Text = oldName.ToString();
    textBox2.Text = oldEmail.ToString();
}

但出现错误。

【问题讨论】:

  • InvalidArgument='0' 的值对于 'index' 无效,我收到此错误,所以我问 mofo。
  • 请显示您编写的一些引发错误的代码。 mofo 是干什么用的?

标签: c# .net winforms listview


【解决方案1】:
ListViewItem selItem = ListView1.SelectedItems[0];
Console.WriteLine(selItem.SubItems[0].Text);
Console.WriteLine(selItem.SubItems[1].Text);

【讨论】:

  • 仍然出现错误。我实际上在做什么。在带有项目更新的 form1 ive 上下文菜单上。单击 updatecontextmenu 将使用文本框名称和电子邮件加载 form2。 listview 包含姓名和电子邮件,如上所示。我想将列表视图中选定行的名称分别放置到名称文本框和电子邮件中。我试过这个。 private void updateToolStripMenuItem_Click(object sender, EventArgs e) { Form3 update = new Form3(); update.ShowDialog(); }
【解决方案2】:

更新。 尝试添加到您的 Form3 窗口方法:

public void SetData(string name, string email)
{
    textBox1.Text = name;
    textBox2.Text = email;
}

接下来,将您的 updateToolStripMenuItem_Click 事件处理程序更新为:

updateToolStripMenuItem_Click(...)
{
    Form3 update = new Form3();
    ListViewItem selectedItem = listView1.SelectedItems[0];
    update.SetData(selectedItem.SubItems[0].Text, selectedItem.SubItems[1].Text);
    update.ShowDialog();            
}

最后,清除Form3_Load(...)的内容

【讨论】:

  • 非常感谢朋友。对此,我真的非常感激。上帝保佑你。
  • 在 Form3_Load 事件处理程序中,您创建了 Form1 的新实例,并且在该实例中没有选定项。
  • 哦,好的,我明白了。所以 listView1.SelectedItems[0].SubItems[0].Text 在 form3 中的意义较小,因为在 form1 中选择了项目,但在 form2 中没有选择。再次感谢。
【解决方案3】:

尝试从您的 Form3 创建属性

public string OldName {get;set;}
public string OldEmail {get;set;}

然后,来自您的From1

updateToolStripMenuItem_Click(...)
{
    using(var update = new Form3())
    {
        var firstCol = listView.SelectedItems[0].Text;
        update.OldName = listView.SelectedItems[0].SubItems[1].Text;
        update.OldEmail = listView.SelectedItems[0].SubItems[2].Text;
        update.ShowDialog();     
    } 
}

那么,在Form3 中看起来像这样

Form3_Load(...)
{
    textBox1.Text = OldName;
    textBox2.Text = OldEmail;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2017-11-22
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多