首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>报表>用友华表Cell控件实现数据xml 构造器的操作类
用友华表Cell控件实现数据xml 构造器的操作类
来源: 发布时间:2008-05-24 发布人: 浏览: 人次   字体: [ ]  

用友华表Cell控件实现数据xml 构造器的操作类
using System;
using System.Collections;
using System.Data;
using System.Xml;

    /// <summary>
    /// 华表数据 xml 构造器。
    /// </summary>
public class XmlBuilder
{
 // 表页。
 private SortedList[] m_Sheets;
 private string[] m_Names;
 /// <summary>
 /// 构造函数,从 xml 构造华表数据。
 /// </summary>
 /// <param name="xml"> xml 字符串。</param>
 public XmlBuilder(string xml)
 {
  ArrayList sheets=new ArrayList();
  ArrayList names=new ArrayList();
  try
  {
   XmlDocument document=new XmlDocument();
   document.LoadXml(xml);
   foreach(XmlElement sheet in document.DocumentElement.SelectNodes("Worksheet"))
   {
    SortedList rows=new SortedList();
    foreach(XmlElement row in sheet.SelectSingleNode("Table").SelectNodes("Row"))
    {
     SortedList cells=new SortedList();
     foreach(XmlElement cell in row.SelectNodes("Cell"))
     {
      XmlElement data=cell.FirstChild as XmlElement;
      switch(data.GetAttribute("Type").ToLower())
      {
       case "string":
        if (data.InnerText.Trim().Length>0)
         cells.Add(int.Parse(cell.GetAttribute("Index")),data.InnerText);
        break;
       case "number":
        cells.Add(int.Parse(cell.GetAttribute("Index")),decimal.Parse(data.InnerText));
        break;
      }
     }
     rows.Add(int.Parse(row.GetAttribute("Index")),cells);
    }
    sheets.Add(rows);
    names.Add(sheet.GetAttribute("Name"));
   }
   m_Sheets=sheets.ToArray(typeof(SortedList)) as SortedList[];
   m_Names=names.ToArray(typeof(string)) as string[];
  }
  catch
  {
   // 不处理。
  }
 }
 /// <summary>
 /// 构造函数,构造空的华表数据(单页)。
 /// </summary>
 public XmlBuilder():this(1)
 {
 }
 /// <summary>
 /// 构造函数,构造空的华表数据(多页)。
 /// </summary>
 /// <param name="sheets">表页个数。</param>
 public XmlBuilder(int sheets)
 {
  m_Sheets=new SortedList[sheets];
  m_Names=new string[sheets];
  for(int i=0;i<sheets;i++)
  {
   m_Sheets[i]=new SortedList();
   m_Names[i]=string.Format("第{0}页",i+1);
  }
 }
 /// <summary>
 /// 获取单元格数据(单页)。
 /// </summary>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <returns>数据(string、decimal或null)。</returns>
 public object GetCellValue(int x,int y)
 {
  return GetCellValue(0,x,y);
 }
 /// <summary>
 /// 获取单元格数据(多页)。
 /// </summary>
 /// <param name="sheet">页号。</param>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <returns>数据(string、decimal或null)。</returns>
 public object GetCellValue(int sheet,int x,int y)
 {
  if (sheet>=0 && m_Sheets.Length>sheet && m_Sheets[sheet].Contains(y) && (m_Sheets[sheet][y] as SortedList).Contains(x))
   return (m_Sheets[sheet][y] as SortedList)[x];
  else
   return null;
 }
 /// <summary>
 /// 获取单元格数据(单页)。
 /// </summary>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <param name="type">类型(Boolean,布尔;Number,数字;String,字符;Time,时间)。</param>
 /// <returns>单元格数据(bool、decimal、string、DateTime或null)。</returns>
 public object GetCellValue(int x,int y,string type)
 {
  return GetCellValue(0,x,y,type);
 }
 /// <summary>
 /// 获取单元格数据(多页)。
 /// </summary>
 /// <param name="sheet">页号。</param>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <param name="type">类型(Boolean,布尔;Number,数字;String,字符;Time,时间)。</param>
 /// <returns>单元格数据(bool、decimal、string、DateTime或null)。</returns>
 public object GetCellValue(int sheet,int x,int y,string type)
 {
  if (GetCellValue(sheet,x,y) is decimal)
  {
   try
   {
    decimal value=(decimal)GetCellValue(sheet,x,y);
    switch(type.ToLower())
    {
     case "boolean":
      return value==0?false:true;
     case "number":
      return value;
     case "string":
      return value.ToString();
     case "time":
      return DateTime.FromOADate(Convert.ToDouble(value));
     default:
      return null;
    }
   }
   catch
   {
    return null;
   }
  }
  else if (GetCellValue(sheet,x,y) is string)
  {
   try
   {
    string value=GetCellValue(sheet,x,y) as string;
    switch(type.ToLower())
    {
     case "boolean":
      return bool.Parse(value);
     case "number":
      return Convert.ToDecimal(value);
     case "string":
      return value;
     case "time":
      return DateTime.Parse(value);
     default:
      return null;
    }
   }
   catch
   {
    return null;
   }
  }
  else
  {
   return null;
  }
 }
 /// <summary>
 /// 设置单元格数据(单页)。
 /// </summary>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <param name="value">值(bool、decimal、string、DateTime或null)。</param>
 public void SetCellValue(int x,int y,object value)
 {
  SetCellValue(0,x,y,value);
 }
 /// <summary>
 /// 设置单元格数据(多页)。
 /// </summary>
 /// <param name="sheet">页号。</param>
 /// <param name="x">列号。</param>
 /// <param name="y">行号。</param>
 /// <param name="value">值(bool、decimal、string、DateTime或null)。</param>
 public void SetCellValue(int sheet,int x,int y,object value)
 {
  if (sheet>=0 && m_Sheets.Length>sheet)
  {
   SortedList row=m_Sheets[sheet][y] as SortedList;
   if (row==null)
   {
    row=new SortedList();
    m_Sheets[sheet][y]=row;
   }
   if (value==null)
   {
    row[x]=null;
   }
   else if (value is bool)
   {
    row[x]=Convert.ToDecimal((bool)value);
   }
   else if (value is decimal)
   {
    row[x]=(decimal)value;
   }
   else if (value is string)
   {
    row[x]=value as string;
   }
   else if (value is DateTime)
   {
    row[x]=Convert.ToDecimal(((DateTime)value).ToOADate());
   }
  }
 }


共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·Win2003打印水晶报表没有权限与报表...
·.net下对水晶报表的多表显示数据
·vs2003和水晶报表9的使用说明
·Active Report使用心得之配置iis及we...
·ActiveReport创建报表文件及中文显示...
·ActiveReport通过代码进行动态的数据...
·ActiveReport在WebForm下的显示类型...
·ActiveReport出现"No Report Specifi...
·ActiveRecord中实体类问题解决方法
·ASP.net集成水晶报表的操作
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·RDLC报表部署遇到的问题及其...
·初学RDLC报表遇到问题的一些...
·ASP.net集成水晶报表的操作
·ActiveRecord中实体类问题解...
·ActiveReport出现"No Report ...
·ActiveReport在WebForm下的显
·ActiveReport通过代码进行动...
·ActiveReport创建报表文件及...
·Active Report使用心得之配置...
热 门 文 章
·Active Report使用心得之配置...
·初学RDLC报表遇到问题的一些...
·ActiveReport在WebForm下的显...
·ActiveReport创建报表文件及...
·ActiveReport通过代码进行动...
·RDLC报表部署遇到的问题及其...
·ActiveReport出现"No Report ...
·ASP.net集成水晶报表的操作
·vs2003和水晶报表9的使用说明
·.net下对水晶报表的多表显示...
·Win2003打印水晶报表没有权限...
·ActiveRecord中实体类问题解...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .