[英]Populating listview control passing parameters to constructor from another form
我需要在 Takenshows.cs 表单上填充一个 listview 控件,将参数从 Main.cs 表单传递给构造函数。
当我运行代码时,列表视图是空的。 我不知道我的代码有什么问题。
这是我向 Takenshows.cs 表单发送参数时按钮上的 main.cs 表单:
shows = new Takenshows(Ordnumber,meddt, values,
num);
这是 Takenshows.cs 表单:
int Ordnum;
string medDateTime;
string val;
int number;
public Takenshows()
{
InitializeComponent();
}
public Takenshows(int Ordnumber, string
dtmed, string values, int num)
{
Ordnum = Ordnumber;
medDateTime = dtmed;
val = values;
number = num;
InitializeComponent();
}
我知道问题出在 Takenshows_load 上,但我不知道为什么 listview 没有填满。
private void Takenshows_Load(object sender, EventArgs e)
{
for(int i=0; i< listView1.Items.Count; i++){
listView1.Items[i].SubItems[0].Text = Ordnum.ToString();
listView1.Items[i].SubItems[1].Text = medDateTime;
listView1.Items[i].SubItems[2].Text = val;
listView1.Items[i].SubItems[3].Text = number.ToString();
ListViewItem item = new ListViewItem(listView1.Items[i].SubItems[0].Text);
item.SubItems.Add(listView1.Items[i].SubItems[1].Text);
item.SubItems.Add(listView1.Items[i].SubItems[2].Text);
item.SubItems.Add(listView1.Items[i].SubItems[3].Text);
listView1.Items.Add(item);
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
我能做些什么来解决这个问题?
可以肯定的是这是 Main.cs 形式:
public partial class Main : Form
{
int Ordnumber;
string meddt;
string values;
int num;
TakenShows shows;
public Main()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Ordnumber = GetOrdNumberLN.getInstance().GettingOrdNumber();
Ordnumber = Ordnumber + 1;
meddt = DateTime.Now.ToString();
num = GetNumberLN.getInstance().GettingNumber();
values = textBox_F.Text + " " + textBox_PT.Text + " " + textBox_QT.Text
shows = new Takenshows(Ordnumber,meddt, values,
num);
shows.Show();
}
您需要将创建的数据保存在某些收集容器中,例如DataTable
或List<T>
以便能够设置/获取/操作收集的项目。 这是一个List<T>
实现示例。
ShowItem.cs
并点击添加按钮。编辑 class 如下:
public class ShowItem
{
public ShowItem() { }
// Find better names...
public int Number { get; set; }
public int OrderNumber { get; set; }
public DateTime MedDate { get; set; }
public string F { get; set; }
public string PT { get; set; }
public string QT { get; set; }
public string Values => $"{F} {PT} {QT}";
}
现在您有了ShowItem
类型,可以从中创建实例并将它们保存在List<ShowItem>
中。
如果要显示模式对话框,请按如下方式编辑Main
窗体:
// +
using System.Collections.Generic;
// ...
public partial class Main : Form
{
private readonly List<ShowItem> showItems;
public Main()
{
InitializeComponent();
showItems = new List<ShowItem>();
}
// Find a better name...
private void button2_Click(object sender, EventArgs e)
{
var show = new ShowItem
{
OrderNumber = GetOrdNumberLN.getInstance().GettingOrdNumber() + 1,
MedDate = DateTime.Now,
Number = GetNumberLN.getInstance().GettingNumber(),
F = textBox_F.Text,
PT = textBox_PT.Text,
QT = textBox_QT.Text
};
showItems.Add(show);
using (var frm = new FrmShows(showItems))
{
frm.ShowDialog();
}
}
}
...和Takenshows
表格:
// +
using System.Linq;
// ...
public partial class Takenshows : Form
{
public Takenshows()
{
InitializeComponent();
}
public Takenshows(IEnumerable<ShowItem> items) : this()
{
AddItems(items);
}
internal void AddItem(ShowItem item) => AddItems(new[] { item });
internal void AddItems(IEnumerable<ShowItem> items)
{
var lvis = items.Select(x => new ListViewItem(new[]
{
x.OrderNumber.ToString(),
x.MedDate.ToString(),
x.Values,
x.Number.ToString()
}));
listView1.Items.AddRange(lvis.ToArray());
}
}
相反,如果您需要保持Takenshows
表单打开,则在Main
中编辑button2_Click
事件处理程序,如下所示。 请注意, AddItem
和AddItems
方法的访问修饰符在此方案中是internal
的。
private void button2_Click(object sender, EventArgs e)
{
var show = new ShowItem
{
OrderNumber = GetOrdNumberLN.getInstance().GettingOrdNumber() + 1,
MedDate = DateTime.Now,
Number = GetNumberLN.getInstance().GettingNumber(),
F = textBox_F.Text,
PT = textBox_PT.Text,
QT = textBox_QT.Text
};
showItems.Add(show);
var frm = Application.OpenForms.OfType<FrmShows>().FirstOrDefault();
if (frm == null)
{
frm = new FrmShows(showItems);
frm.Show();
}
else
{
frm.AddItem(show);
frm.Activate();
}
}
希望这可以帮助您起飞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.