如何使用行名从DataRow获取值

时间:2015-06-26 06:50:05

标签: c# .net datatable

我有一个表格,格式如下:

Name                  Value
------------------------------- 
IsFirst           0
skateType         0
IsApplied         1

我有一个类DetailsClass,需要根据表中的值更新它的对象。

public class DetailsClass
    {
        [DataMember]
        public bool IsFirst { get; set; }

        [DataMember]
        public bool skateType { get; set; }

        [DataMember]
        public bool IsApplied { get; set; }
    }

现在我在做:

 foreach (DataRow row in dataTable.Rows)
                {
                    if (String.Equals(row["Name"].ToString(), "IsFirst"))
                        VDetail.Base = dataTable.Rows[0]["Value"] != null ?   Convert.ToBoolean(dataTable.Rows[0]["Value"]) : false;

                    else if (String.Equals(row["Name"].ToString(), "skateType"))
                        VDetail.Type = dataTable.Rows[1]["Value"] != null ? Convert.ToBoolean(dataTable.Rows[0]["Value"]) : false;

                    else if (String.Equals(row["Name"].ToString(), "IsApplied"))
                        VDetail.IsApplied = dataTable.Rows[2]["Value"] != null ? Convert.ToBoolean(dataTable.Rows[0]["Value"]) : false;
                }

但有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

解读1

按名称访问字段的方法是row.Field(“columnName”)。只需将“long”替换为列的数据类型,将columnName替换为正确的名称。

解读2

如果你所追求的是一种将数据从你的表映射到你的对象的方法,那么我会建议:

var detail = new DetailsClass();
foreach (var row in dataTable.Rows)
{
    if (row.Field<string>("Name") == "IsFirst")
        detail.IsFirst = row.Field<bool>("IsFirst");
    else if (row.Field<string>("Name") == "skateType")
        detail.skateType = row.Field<bool>("skateType");
    else if (row.Field<string>("Name") == "IsApplied")
        detail.IsApplied = row.Field<bool>("IsApplied");
}

我假设表中的数据类型是一个位字段,因为类对象有bool。