数据结构上最好用 键-值 对,类似这样:
{
  "颜色" : "蓝",
   "大小" : "中码",
}string[] names = { "MB", "TBil", "XY", "AST"};
var attributes = names.ToDictionary(k => k, k => dtMx.Columns.Contains(k) ? dtMx.Rows[0][k] as string : null);

解决方案 »

  1.   

    直接循环遍历datatable,按顺序取出就是了
    用一个数组去接又或者你干脆用datatable的值去用就行了,只要你记得你的栏位顺序
      

  2.   

    string MB="";
                string TBil="";
                string XY="";
                string AST="";
    如果你非要这么去定义属性,你只能写一大堆if或用swich里一大堆case来判断
    你不敢定义成数组吗
      

  3.   

    或者你可以查找一下"反射"的概念
    既然知道列名,而列名跟你的string变量名是一致的
    你可以通过列名反射变量
      

  4.   

      #region 把DataRow转化成对象
            /// <summary>
            /// 把DataRow转化成对象
            /// </summary>
            /// <param name="dr">dr</param>
            /// <param name="obj">对象</param>
            /// <returns></returns>
            public static object DataRowToObj(System.Data.DataRow dr, object obj)
            {
                try
                {
                    if (dr != null && obj != null)
                    {
                        Type t = obj.GetType();
                        PropertyInfo[] f = t.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);
                        string tableName = t.Name;
                        foreach (PropertyInfo pi in f)
                        {
                            string field = pi.Name;
                            if (dr.Table.Columns.Contains(field) && dr[field] != DBNull.Value)
                                pi.SetValue(obj, dr[field], null);
                        }
                    }
                }
                catch (Exception ex)
                {
                    new Exception(ex.ToString());
                    return null;
                }
                return obj;
            }
            #endregion
      /// <summary>    
            /// DataTable 转换为List 集合    
            /// </summary>    
            /// <typeparam name="TResult">类型</typeparam>    
            /// <param name="dt">DataTable</param>    
            /// <returns></returns>    
            public static List<T> ToList<T>(DataTable dt) where T : class, new()
            {
                //创建一个属性的列表    
                List<PropertyInfo> prlist = new List<PropertyInfo>();
                //获取TResult的类型实例  反射的入口                Type t = typeof(T);            //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表     
                Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });            //创建返回的集合                List<T> oblist = new List<T>();            foreach (DataRow row in dt.Rows)
                {
                    //创建TResult的实例    
                    T ob = new T();
                    //找到对应的数据  并赋值    
                    prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
                    //放入到返回的集合中.    
                    oblist.Add(ob);
                }
                return oblist;
            }  
      

  5.   

    要怎么定义呢?
    我是写了一个循环,但取值的时候不知道怎么取了。。
    string[] a =new string[dtMX.Columns.Count];
                for (int i = 0; i < dtMX.Columns.Count; i++)
                {
                    a[i] = dtMX.Columns[i].ColumnName;
                }
                for (int j = 0; j < a.Length; j++)
                {
                    if (dtMX.Columns.Contains(a[j].ToString()))
                    {
                        //到这里不知道怎么赋值了
                    }
                }
      

  6.   


            public string[] ColValues;///存放的数据
            public enum ColumnName//数据库中列的名称
            {
                MB,
                TBiL,
                XY,
                AST,
                ABC,
                EDFE,
                CDDE,
                MaxCount,///最大多少列
            }
           ///获取数据 
            public void InitValues(DataTable dtMX)
            {
                ColValues =new string[(int)ColumnName.MaxCount];
                for (int i = 0; i < dtMX.Columns.Count;i++ )
                {
                    ColumnName colname = (ColumnName)System.Enum.Parse(typeof(ColumnName), dtMX.Columns[i].ColumnName);
                    ColValues[(int)colname]=dtMX.Rows[0][i].ToString();
                }
            }
          ///取得数据
            public string GetValue(ColumnName colname)
            {
                return ColValues[(int)colname];
            }
      

  7.   

    让你用数组,不一定非要string[ ]啊
    可以是List<string,string>或Dectionary<string,string>
    总之得把列名和值对应起来,一个存名字,一个存值
    要么你建立两个string[],一个存名字,一个存值也行,不过通过名字找索引就会比较麻烦,需要遍历匹配赋值的时候,就循环赋值呗,看哪个列名能匹配上,就把值给进去