Используйте метод, который позволяет вам ссылаться на объект (в данном случае это элемент управления) и передавать методу ссылку на этот объект.
Без жестко заданной ссылки на объект ваш метод будет более гибким.
Здесь я передаю методу 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;
}