键入的数据行 - 根据列名插入数据

时间:2015-04-02 06:27:12

标签: c# asp.net reflection dataset datarow

我有一张桌子,我根据某些标准存储数据。两个表都是打字表 tblShipper有大约10列,tblParsedData有3列(ID,FieldName,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 Dataset中。将此数据集绑定到gridview,以便用户可以查看和验证/编辑数据,然后将其保存到数据库(tblShipper)中。

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

1 个答案:

答案 0 :(得分: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?