我有一个gridview,我试图从网格视图中加载带有列的列表,我得到了一个空引用异常
我已经试过了
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;
}
我尝试了这个
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;
}
进一步的解释
我有两种形式的frmMain和frmSub,其中gridview在frmMain中,而组合框在frmSub中,我需要调用函数
LoadStringList()
来填充组合框 最佳答案
使用允许您引用对象(在这种情况下为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;
}