数据结构上最好用 键-值 对,类似这样:
{
"颜色" : "蓝",
"大小" : "中码",
}string[] names = { "MB", "TBil", "XY", "AST"};
var attributes = names.ToDictionary(k => k, k => dtMx.Columns.Contains(k) ? dtMx.Rows[0][k] as string : null);
{
"颜色" : "蓝",
"大小" : "中码",
}string[] names = { "MB", "TBil", "XY", "AST"};
var attributes = names.ToDictionary(k => k, k => dtMx.Columns.Contains(k) ? dtMx.Rows[0][k] as string : null);
解决方案 »
- 如何在formview插入模式下读取freetextbox控件的值
- 问一个关于值类型与引用类型的基础问题
- 奇怪!c#调用DLL在VS2003正常,在VS2005中出错?
- 公司的項目,沒搞出來,求大家幫忙
- C#中关于日期的类有哪些阿,在哪儿能找到类结构图阿?
- 求助 :做网页时生成的.aspx编译时 可以通过 可是放到iis 中就不能访问了
- 哪位能给这个ADO.NET的SQL Server引擎把事物控制和数据库更新,添加上去或修改!100分!
- datagrid双击如何实现??谢谢了!
- 搜索某人发表的所有文章的方法
- 数据库中存在许多xml,怎么批量修改这些xml中的一些内容
- Listbox控件在Surface平板中滑动的怪异现象
- c# socket 1对多(256个也可以) 通信
用一个数组去接又或者你干脆用datatable的值去用就行了,只要你记得你的栏位顺序
string TBil="";
string XY="";
string AST="";
如果你非要这么去定义属性,你只能写一大堆if或用swich里一大堆case来判断
你不敢定义成数组吗
既然知道列名,而列名跟你的string变量名是一致的
你可以通过列名反射变量
/// <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;
}
我是写了一个循环,但取值的时候不知道怎么取了。。
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()))
{
//到这里不知道怎么赋值了
}
}
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];
}
可以是List<string,string>或Dectionary<string,string>
总之得把列名和值对应起来,一个存名字,一个存值
要么你建立两个string[],一个存名字,一个存值也行,不过通过名字找索引就会比较麻烦,需要遍历匹配赋值的时候,就循环赋值呗,看哪个列名能匹配上,就把值给进去