所以我尝试在静态类中创建一个方法,以便从任何类型的列表中更新datagridView中的最新数据。这里的方法:
public static void FillDataGridView(List<object> pList, DataGridView pdgv)
{
int i = 0;
pdgv.Rows.Clear();
//obtain the first item in the list
var item = pList.FirstOrDefault();
if(item is SST_StakeholderStaff)
{
List<SST_StakeholderStaff> list = pList.Cast<SST_StakeholderStaff>().ToList();
if (list.Count()>0)
{
pdgv.Rows.Add(list.Count());
foreach (SST_StakeholderStaff staff in list)
{
pdgv.Rows[i].Cells[0].Value = staff.SST_ID;
pdgv.Rows[i].Cells[2].Value = staff.SST_Last_Name;
pdgv.Rows[i].Cells[1].Value = staff.SST_First_Name;
pdgv.Rows[i].Cells[3].Value = staff.SST_Postion;
pdgv.Rows[i].Cells[4].Value = staff.SST_Email;
i++;
}
}
}
else if(item is RIP_Recent_Interaction_Participants)
{
List<RIP_Recent_Interaction_Participants> list = pList.Cast<RIP_Recent_Interaction_Participants>().ToList();
if (list.Count() > 0)
{
pdgv.Rows.Add(list.Count());
foreach(RIP_Recent_Interaction_Participants participant in list)
{
pdgv.Rows[i].Cells[0].Value = participant.RIP_ID;
pdgv.Rows[i].Cells[1].Value = participant.RIP_Name_Participant;
i++;
}
}
}
else if(item is RIMP_Recent_Interaction_Materials_Prepared)
{
List<RIMP_Recent_Interaction_Materials_Prepared> list = pList.Cast<RIMP_Recent_Interaction_Materials_Prepared>().ToList();
if(list.Count()> 0)
{
pdgv.Rows.Add(list.Count());
foreach(RIMP_Recent_Interaction_Materials_Prepared Material in list)
{
pdgv.Rows[i].Cells[0].Value = Material.RIMP_ID;
pdgv.Rows[i].Cells[1].Value = Material.RIMP_Serial_Number;
pdgv.Rows[i].Cells[2].Value = Material.RIMP_Name_Material;
i++;
}
}
}
}
基本上我的代码会检查这个plist所具有的对象(或类)。之后,他将刷新所选的datagridview。 当我将此方法调用到我的主代码中时,我总是会收到错误消息,说我无法将列表转换为列表。
GUI.FillDataGridView(List_SST.Where(x => x.SST_ST_ID == int.Parse(txtID.Text)), dgvStaff);
请注意,在我的程序中,我有三个不同的datagridview和类
答案 0 :(得分:0)
从您的评论中,我推断出错误不会出现在显示的代码中,而是在调用它时。问题是List<SomeType>
与List<object>
的分配不兼容。这将允许您在List<object>
中插入任何类型的对象,实际上是List<SomeType>
,并且只允许插入SomeType
类型的项(和派生类型)。
将方法签名更改为
public static void FillDataGridView(IEnumerable pList, DataGridView pdgv)
然后用
获取第一个项目object item = pList.Cast<object>().FirstOrDefault();