如何从datagridview加载列表<t>

时间:2018-05-02 17:59:20

标签: c# datagridview

我有一个gridview,我正在尝试使用网格视图中的列加载列表,并且我得到一个空引用异常

我试过这个

png = Image.fromarray(labelMap).convert('P')
png.putpalette(cmap)
png.save(pngPath, format='PNG')

我试过这个

    public static List<string> LoadStringList()
    {
        List<string> stringList = new List<string>();

        if (contactDataGridView.RowCount != 0)
        {
            for (int i = 0; i < contactDataGridView.Rows.Count; i++)
            {
                stringList.Add((string)contactDataGridView.Rows[i].Cells[2].Value);
            }

        }
        return stringList;
    }

进一步解释

我有两个表格frmMain和frmSub,其中gridview在frmMain中,而frmSub中的组合框我需要调用函数 public static List<string> LoadStringList() { List<string> stringList = new List<string>(); if (frmPRG299.mainForm.contactDataGridView.RowCount != 0) { for (int i = 0; i <frmPRG299.mainForm.contactDataGridView.Rows.Count; i++) { stringList.Add((string)frmPRG299.mainForm.contactDataGridView.Rows[i].Cells[2].Value); } } return stringList; } 来填充Combobox

3 个答案:

答案 0 :(得分:0)

而不是使用 stringList.Add((字符串)contactDataGridView.Rows [I] .Cells [2]。价值); chaange代码 stringList.Add(contactDataGridView.Rows [i] .Cells [“你的栏目名称”]。值+“”);

答案 1 :(得分:0)

使用允许您引用对象的方法(在本例中为Control),并向该方法传递对该对象的引用。
如果没有硬编码的对象引用,您的方法会更灵活。

我在这里向方法传递DataGridView控制参考和从中提取当前值的单元格数。

由于Cell.Value可能是null,因此您必须在尝试阅读和/或将其转换为所需类型之前对其进行验证。

List<string> MyList = LoadStringList(this.dataGridView1, 2);


public List<string> LoadStringList(DataGridView dgv, int cell)
{
    if ((dgv == null) || (dgv.RowCount == 0)) return null;

    List<string> result = dgv.Rows.Cast< DataGridViewRow>()
        .Select(r => { return r.Cells[cell].Value != null 
                            ? r.Cells[cell].Value.ToString() 
                            : default; })
        .ToList();

    return result;
}

如果需要更通用的输入类型:

try
{ 
    List<int> MyList = LoadList<int>(this.dataGridView1, 2).ToList();
}
catch (Exception ex)
{
    //Handle the exception/Update the UI/Prompt the User
    Console.WriteLine(ex.Message);
}


public IEnumerable<T> LoadList<T>(DataGridView dgv, int cell)
{
    if ((dgv == null) || (dgv.RowCount == 0)) return null;

    IEnumerable<T> result = null;

    try
    {
        result = dgv.Rows.Cast<DataGridViewRow>()
                         .Select(r => { return r.Cells[cell].Value != null
                                   ? (T)Convert.ChangeType(r.Cells[cell].Value, typeof(T))
                                   : default;
                            })
                         .ToList();
    }
    catch (Exception ex) {
        //Manage the exception as required
        throw ex;
    }
    return result;
}

答案 2 :(得分:-1)

  public List<string> LoadStringList(DataGridView contactDataGridView)
    {
        List<string> stringList = new List<string>();

        if (contactDataGridView.RowCount != 0)
        {
            for (int i = 0; i < contactDataGridView.Rows.Count; i++)
            {
                var stringData = contactDataGridView.Rows[i].Cells[2].Value as string;
                if(!string.IsNullOrEmpty(stringData))
                {
                    stringList.Add(stringData);
                }
            }

        }
        return stringList;
    }