我需要在 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();
}
uj5u.com熱心網友回復:
您需要將您創建的資料保存在某個收集容器中,例如DataTable或List<T>能夠設定/獲取/操作收集的專案。這是一個List<T>實作示例。
- 切換到解決方案資源管理器視窗并選擇您的專案。
- 按Shift Alt C打開“添加新專案”對話框。
- 將類重命名為
ShowItem.cs并點擊添加按鈕。
編輯類如下:
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 Takenshows(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表單打開,則編輯button2_Click事件處理程式,Main如下所示。請注意,AddItemandAddItems方法的訪問修飾符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<Takenshows>().FirstOrDefault();
if (frm == null)
{
frm = new Takenshows(showItems);
frm.Show();
}
else
{
frm.AddItem(show);
frm.Activate();
}
}
希望這可以幫助您起飛。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511556.html
標籤:C#列表显示
