У меня есть программа, которая преобразует все данные в DataGridView
в соответствующий DataTable
. Я хочу расширить этот метод, чтобы включить возможность конвертировать только выбранный диапазон DataGridView
. Я могу это сделать, используя базовую логику if (bIsSelection) /*Do stuff*/ else /*Do other stuff*/
, но я хотел бы использовать здесь дженерики. Проблема в том, что полный диапазон DataGridView
- это DataGridViewColumnCollection
, а выбранный диапазон будет DataGridViewSelectedColumnCollection
, а C#, похоже, не нравится какое-либо преобразование между ними или допускает неявное типирование в случае дженериков.Как избежать явного литья с использованием Generics
Первая часть моего кода была
public static DataTable BuildDataSetFromDgv(DataGridView _dataGridView,
string strTabName)
{
DataTable dt = new DataTable();
dt.TableName = strTabName;
foreach (DataGridViewColumn col in _dataGridView.Columns)
dt.Columns.Add(col.DataPropertyName, col.ValueType);
и я попытался
public static DataTable BuildDataSetFromDgv<T>(DataGridView _dataGridView,
string strTabName, ICollection<T> _columnColl, ICollection<T> _rowColl)
{
DataTable dt = new DataTable();
dt.TableName = strTabName;
//foreach (DataGridViewColumn col in _dataGridView.Columns)
foreach (DataGridViewColumn col in _columnColl)
dt.Columns.Add(col.DataPropertyName, col.ValueType);
который не работает из-за неявное преобразование и изменениями _columnColl
в _columnColl as DataGridView[Selected]ColumnCollection
поражениях объективного.
Как это сделать с использованием дженериков в этом случае?
Спасибо за ваше время.
Обратите внимание, что обе эти коллекции реализуют 'ICollection'. –
Спасибо. Я набрал это на лету ... – MoonKnight