我有一个例程,可以将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
会使目标失败。
在这种情况下,如何使用泛型来完成这项工作?
感谢您的时间。
答案 0 :(得分:3)
我不确定为什么你需要一个通用的 - 都是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);