2015-04-02 60 views
0

我有一张表,用于存储基于特定条件的数据。这两个表都是键入表格。
tblShipper具有大约10列和tblParsedData有3列(ID,字段名,fieldValue方法)键入的数据行 - 基于列名插入数据

我创建从tblShipper一排,以添加fieldValue方法为每个列。但是,正如我们所知,键入的行将显示列名称。

我无法找到像下面的代码或更好的东西做一些事情的方法。

MyDataset.tblShipperRow _newRow = _tblShipper.NewtblShipperRow(); 
foreach(tblParsedDataRow _row in _parsedDataForShipper.Rows) 
    _newRow[_row.FieldName] = _row.FieldValue; 
_tblShipper.Rows.Add(_newRow); 

更多细节:
tblParsingParams店的参数,我们使用这些参数来从文件中读取数据,解析,我们阅读,并将其存储在tblParsedData键/值格式的数据。

tblParsedData具有以下字段:key,value,tablename(此数据所在的表),columnname。

在运行时,我创建了tblShipper或任何其他表的数据集,然后我将数据从tblParsedData加载到数据表中。现在我需要将数据从tblParsedData数据表插入到tblShipper数据集中。将此数据集绑定到一个gridview,以便用户可以查看和验证/编辑数据,并稍后将其保存到数据库(tblShipper)中。

重复:https://stackoverflow.com/questions/29388544/insert-data-into-typed-row-on-the-fly-based-on-column-name

回答

0

我终于想出了一个办法这样做。我使用反射来做到这一点,使用反射来加载类型行的所有属性,并将其与列名进行比较。如果匹配,则使用反射设置该值。简单!

MyDataset.tblShipperRow _newRow = _tblShipper.NewtblShipperRow(); 
foreach(tblParsedDataRow _row in _parsedDataForShipper.Rows) 
{  
     foreach (var property in _newRow.GetType().GetProperties()) 
     { 
      if (_row.FieldName == property.Name) 
      { 
       property.SetValue(_newRow, _row.FieldValue, null); 
       break; 
      } 
     } 
} 

有点用从后下

How to set Property value using Reflection?