Hashtable转换成datable

yp19910928 2012-05-16 02:14:56
求代码,我已经将数据存到了hashtble中,现在想转换哈。求解。如题。
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:
引用 2 楼 的回复:

引用 1 楼 的回复:
参考,网上很多http://hi.baidu.com/hkydj/blog/item/7fe93481cd91f1c09023d93f.html


网上搜到的都是hashtable结构固定来转成datatable,问题是hashtable里的键值对是动态数量的怎么办,需要动态生成datatable的列
……
[/Quote]
这个你看一下hashtable的用法吧
yp19910928 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:

引用 1 楼 的回复:
参考,网上很多http://hi.baidu.com/hkydj/blog/item/7fe93481cd91f1c09023d93f.html


网上搜到的都是hashtable结构固定来转成datatable,问题是hashtable里的键值对是动态数量的怎么办,需要动态生成datatable的列

自己琢磨了一个办法,把ha……
[/Quote]

/// <summary>
///健康信息
/// </summary>
class HealthData
{
private float _data01 = 0f;
private float _data02 = 0f;
private float _data03 = 0f;
private float _data04 = 0f;
private float _data05 = 0f;
private float _data06 = 0f;

/// <summary>
/// 向对象中添加值
/// </summary>
/// <param name="dr">一行中包含数据类型,数据类型名称,采集时间,采集值(hdtype,typename,collecttime,collectdata)</param>
public HealthData(DataRow dr)
{
if (dr["selfchecktypeid"].ToString() == "1")
{
_data01 = float.Parse( dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "2")
{
_data02 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "3")
{
_data03 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "4")
{
_data04 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "5")
{
_data05 = float.Parse(dr["collectdata"].ToString());
}
else
{
_data06 = float.Parse(dr["collectdata"].ToString());
}
}

/// <summary>
/// 向对象中添加值并返回该对象
/// </summary>
/// <param name="dr">行</param>
/// <returns></returns>
public HealthData AddData(DataRow dr)
{
if (dr["selfchecktypeid"].ToString() == "1")
{
_data01 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "2")
{
_data02 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "3")
{
_data03 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "4")
{
_data04 = float.Parse(dr["collectdata"].ToString());
}
else if (dr["selfchecktypeid"].ToString() == "5")
{
_data05 = float.Parse(dr["collectdata"].ToString());
}
else
{
_data06 = float.Parse(dr["collectdata"].ToString());
}

return this;
}

public float Data01
{
get { return _data01; }
set { _data01 = value; }
}

public float Data02
{
get { return _data02; }
set { _data02 = value; }
}

public float Data03
{
get { return _data03; }
set { _data03= value; }
}

public float Data04
{
get { return _data04; }
set { _data04 = value; }
}

public float Data05
{
get { return _data05; }
set { _data05 = value; }
}

public float Data06
{
get { return _data06; }
set { _data06 = value; }
}



}

上面是我自己创建的一个对象。

/// <summary>
/// 给Gridview绑定数据源
/// </summary>
/// 创建者:yangpeng 2012-5-10
public void SetDataToGridview()
{
try
{
string Account="";
CIM.COMM.MyCookie mycook = new CIM.COMM.MyCookie(CIM.COMM.CIMCookieNames.CIM_Care);
if (mycook != null)
{
Account = mycook.GetCookieValue("UserId");
}

DataSet ds=CIM.BLL.T_SELFCHECK.GetData(Account);
DataTable dt_data = ds.Tables[0];
Hashtable ht_data = new Hashtable();

for (int i = 0; i < dt_data.Rows.Count; i++)
{
string ctime = dt_data.Rows[i]["collecttime"].ToString();


if (ht_data.ContainsKey(ctime))
{
HealthData hd = (HealthData)ht_data[ctime];
hd.AddData(dt_data.Rows[i]);

ht_data.Remove(ctime);
ht_data.Add(ctime,hd);
}
else
{
HealthData hd = new HealthData(dt_data.Rows[i]);
ht_data.Add(ctime,hd);
}
}
DataTable dtTmp = new DataTable();
foreach (DictionaryEntry de in ht_data)
{
string p = de.value.toString();//这得到的不是值啊。 string q = de.Key.ToString();
}
}
catch (Exception ex)
{
Logger.Error("HelthInfo_Today_HealthInfo:SetDataToGridview " + ex.Message);
}
}


我怎样根据hashtable里面的key去找出它下面的N个value值。上面循环出来的value是个对象,怎么得到对象里面的值呢。
EnForGrass 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
参考,网上很多http://hi.baidu.com/hkydj/blog/item/7fe93481cd91f1c09023d93f.html


网上搜到的都是hashtable结构固定来转成datatable,问题是hashtable里的键值对是动态数量的怎么办,需要动态生成datatable的列

自己琢磨了一个办法,把hashtable的键值对循环……
[/Quote]
if (de.Key.ToString().ToLower() == "showprice" || de.Key.ToString().ToLower() == "costmoney" || de.Key.ToString().IndexOf("201")>=0)//判断是不是hashtable中的键值是不是showprice、costmoney其中一个,或者键值中是否存在201
dtTmp.Columns.Add(de.Key.ToString(),typeof(decimal));//DataTable添加一列(就是hashtable的键,数据类型是decimal)
else if (de.Key.ToString().ToLower() == "minschedulestarttime" || de.Key.ToString().ToLower() == "maxscheduleendtime")

其实这个判断你不用管,主要是 dtTmp.Columns.Add(de.Key.ToString(),typeof(decimal));这句话
yp19910928 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
参考,网上很多http://hi.baidu.com/hkydj/blog/item/7fe93481cd91f1c09023d93f.html
[/Quote]

网上搜到的都是hashtable结构固定来转成datatable,问题是hashtable里的键值对是动态数量的怎么办,需要动态生成datatable的列

自己琢磨了一个办法,把hashtable的键值对循环加在datatable的第0行,第n列。



Hashtable result = resultList[i] as Hashtable;
DataTable dtTmp = new DataTable();
foreach (DictionaryEntry de in result)
{
if (de.Key.ToString().ToLower() == "showprice" || de.Key.ToString().ToLower() == "costmoney" || de.Key.ToString().IndexOf("201")>=0)
dtTmp.Columns.Add(de.Key.ToString(),typeof(decimal));
else if (de.Key.ToString().ToLower() == "minschedulestarttime" || de.Key.ToString().ToLower() == "maxscheduleendtime")
dtTmp.Columns.Add(de.Key.ToString(),typeof(DateTime));
else
dtTmp.Columns.Add(de.Key.ToString());

if (dtTmp.Rows.Count <= 0)
{
dtTmp.Rows.Add(de.Value);
}
else
{
if (de.Value == null)
dtTmp.Rows[0][de.Key.ToString()] = DBNull.Value;
else
dtTmp.Rows[0][de.Key.ToString()] = de.Value;
}
}
dt.Merge(dtTmp);


能否解释下

if (de.Key.ToString().ToLower() == "showprice" || de.Key.ToString().ToLower() == "costmoney" || de.Key.ToString().IndexOf("201")>=0)
dtTmp.Columns.Add(de.Key.ToString(),typeof(decimal));
else if (de.Key.ToString().ToLower() == "minschedulestarttime" || de.Key.ToString().ToLower() == "maxscheduleendtime")
EnForGrass 2012-05-16
  • 打赏
  • 举报
回复

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧