C#void方法如何在参数

时间:2017-07-19 15:16:55

标签: c# datagridview

所以我尝试在静态类中创建一个方法,以便从任何类型的列表中更新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);

enter image description here

请注意,在我的程序中,我有三个不同的datagridview和类

1 个答案:

答案 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();