Как Избежать Явного Приведения, используя Дженерики - PullRequest
0 голосов
/ 16 марта 2012

У меня есть подпрограмма, которая преобразует все данные в DataGridView в соответствующие DataTable.Я хочу расширить этот метод, чтобы включить возможность конвертировать только выбранный диапазон DataGridView.Я могу четко сделать это, используя базовую логику if (bIsSelection) /*Do stuff*/ else /*Do other stuff*/, но я хотел бы использовать дженерики здесь.Проблема состоит в том, что полный диапазон DataGridView равен DataGridViewColumnCollection, а выбранный диапазон будет DataGridViewSelectedColumnCollection, и C # не похоже на какое-либо преобразование между ними или допускает неявную типизацию в случае обобщенных типов.

Первая часть моего кода была

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 побеждает цель.

Как мне заставить эту работу с дженериками в этом случае?

Спасибо за ваше время.

1 Ответ

3 голосов
/ 16 марта 2012

Я не уверен, зачем вам нужен общий - оба набора DataGridViewColumn.Например, почему ниже не должно работать для вас

public static DataTable BuildDataSetFromDgv(DataGridView _dataGridView, 
    string strTabName, IEnumerable columns)
{
    DataTable dt = new DataTable();
    dt.TableName = strTabName;

    var dvgColumns = columns.Cast<DataGridViewColumn>();
    foreach (var col in dvgColumns)
        dt.Columns.Add(col.DataPropertyName, col.ValueType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...