手记

C#系列:读取xml文件并形成表格显示!

  • 官方简介:C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。

  • 本文是小编首次接触C#,由一位大神成功代入C#世界,甚是欣喜!

  • 项目需求:读取xml文件,并形成表格显示!

  • DataGridUtils类

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;

namespace Attendance
{
    /// <summary>
    /// Description of DataGridUtils.
    /// </summary>
    public sealed class DataGridUtils
    {
        public static string FZ_XML_PATH = null;
        public static string KC_XML_PATH = null;
        public static string MC_XML_PATH = null;

        public static Dictionary<int,string> XML_FILE_MAP = new Dictionary<int,string>();
            
        private  DataGridUtils()
        {
        }
        
        public static void InitXmlFileMap(){
            if(FZ_XML_PATH==null){
                XML_FILE_MAP.Remove(0);
            }else{
                XML_FILE_MAP[0] = FZ_XML_PATH;
            }
            if(KC_XML_PATH==null){
                XML_FILE_MAP.Remove(1);
            }else{
                XML_FILE_MAP[1] = KC_XML_PATH;
            }
            if(MC_XML_PATH==null){
                XML_FILE_MAP.Remove(2);
            }else{
                XML_FILE_MAP[2] = MC_XML_PATH;
            }
        }
    }
}
  • FileUtis类

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;

namespace Attendance
{
    /// <summary>
    /// Description of FileUtis.
    /// </summary>
    public sealed class FileUtis
    {
        private FileUtis()
        {
        }
        
                
        public static string ParseCsDataTime(string filePath){
            string csDateTime = "";
            
            if (System.IO.File.Exists(filePath)) {
                XmlDocument xmlDoc = new XmlDocument();//新建XML文件
                xmlDoc.Load(filePath);//加载XML文件
                XmlNode xm = xmlDoc.SelectSingleNode("/root/head");
                XmlElement ele = (XmlElement)xm;
                csDateTime = ele.GetAttribute("cs_data_time");
                
            }
            
            return csDateTime;
        }
        
        public static List<List<string>> ParseData(string filePath){
            List<List<string>> list =  new List<List<string>>();
            
            if (System.IO.File.Exists(filePath)) {
                XmlDocument xmlDoc = new XmlDocument();//新建XML文件
                xmlDoc.Load(filePath);//加载XML文件
                XmlNodeList nodeList = xmlDoc.SelectNodes("//data"); 
                if(nodeList!=null && nodeList.Count>0){
                    for(int i=0;i<nodeList.Count;i++)
                    {
                        XmlElement ele = (XmlElement)(nodeList.Item(i));
                        XmlAttributeCollection  attrCols = ele.Attributes;
                        List<string> rowData = new List<string>();
                        foreach(XmlAttribute attr in attrCols){
                            rowData.Add(ele.GetAttribute(attr.Name));
                        }
                        list.Add(rowData);
                    }
                }
            }
            return list;
                
        }
        
        /// <summary>
        /// </summary>
        /// <param name="fileAllPath">文件全路径名</param>
        /// <param name="data">要写入的字符</param>
        /// <param name="encoding">编码</param>
        /// <param name="fileMode">模式</param>
        public static void WriteFile(string fileAllPath, string data, Encoding encoding, FileMode fileMode)
        {
            FileStream fs = null;
            try {
                if (encoding == null) {
                    encoding = Encoding.Default;
                }
                //这里的FileMode.create是创建这个文件,如果文件名存在则覆盖重新创建
                fs = new FileStream(fileAllPath, fileMode);
                //存储时时二进制,所以这里需要把我们的字符串转成二进制
                byte[] bytes = encoding.GetBytes(data);
                fs.Write(bytes, 0, bytes.Length);
            } catch (Exception e) {
                //Debug.LogError(ee.Message);
            } finally {
                if (fs != null) {
                    fs.Close();
                }
            }
   
        }
    }
    
    

}
  • MainForm类

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;

namespace Attendance
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        string strConnection = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.181)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User ID=mine;Password=mine;";
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
        void MainFormLoad(object sender, EventArgs e)
        {
            InitUI();
            InitXmlFilePath();
            FillFzDataGrid(0);
        }
        
        private void InitUI()
        {
            this.cs_mine_code.Text = ConfUtil.GetProfileString("CS_MINE_CODE");
            this.filePath.Text = ConfUtil.GetProfileString("FILENAME");
            this.url.Text = ConfUtil.GetProfileString("URL");
            this.port.Text = ConfUtil.GetProfileString("PORT");
            this.cs_mine_code.Focus();
        }
        
        /// <summary>
        /// 初始化xml文件路径
        /// </summary>
        private void InitXmlFilePath()
        {
            DataGridUtils.FZ_XML_PATH = null;
            DataGridUtils.KC_XML_PATH = null;
            DataGridUtils.MC_XML_PATH = null;
            string filePath = this.filePath.Text;
            DirectoryInfo dir = new DirectoryInfo(filePath);
            if (!dir.Exists) {
                MessageBox.Show("文件目录[" + this.filePath.Text + "]不存在");
            } else {
                var fileInfos = dir.GetFiles();
                foreach (var fileInfo in fileInfos) {
                    string fileName = System.IO.Path.GetFileNameWithoutExtension(fileInfo.FullName);
                    if (fileName.StartsWith(this.cs_mine_code.Text.Trim() + "AQFZ")) {
                        DataGridUtils.FZ_XML_PATH = fileInfo.FullName;
                    }
                    if (fileName.StartsWith(this.cs_mine_code.Text.Trim() + "AQKC")) {
                        DataGridUtils.KC_XML_PATH = fileInfo.FullName;
                    }
                    if (fileName.StartsWith(this.cs_mine_code.Text.Trim() + "AQMC")) {
                        DataGridUtils.MC_XML_PATH = fileInfo.FullName;
                    }
                    
                }
                
                DataGridUtils.InitXmlFileMap();
            }
            
        }
        
        /// <summary>
        /// 初始化实时数据文件combox
        /// </summary>
        private void InitSSXmlFileCombox()
        {
            string filePath = this.filePath.Text;
            DirectoryInfo dir = new DirectoryInfo(filePath);
            if (!dir.Exists) {
                MessageBox.Show("文件目录[" + this.filePath.Text + "]不存在");
            } else {
                var fileInfos = dir.GetFiles();
                this.cbox_ss.Items.Clear();
                foreach (var fileInfo in fileInfos) {
                    string fileName = System.IO.Path.GetFileNameWithoutExtension(fileInfo.FullName);
                    if (fileName.StartsWith(this.cs_mine_code.Text.Trim() + "AQSS")) {
                        this.cbox_ss.Items.Add(fileName + ".xml");
                    }
                }
                if (this.cbox_ss.Items.Count> 0) {
                    this.cbox_ss.SelectedIndex = 0;
                }else{
                    this.cbox_ss.SelectedIndex = -1;
                    this.dg_3.Rows.Clear();                    
                }
            }
        }
        
        //grid填充数据
        private void FillFzDataGrid(int nTabIndex)
        {
            if (nTabIndex != 3) {
                ((DataGridView)((this.tabCtrl_fz.TabPages[nTabIndex].Controls.Find("dg_" + nTabIndex, false)[0]))).Rows.Clear();
                string fileAllPath = null;
                if(DataGridUtils.XML_FILE_MAP.ContainsKey(nTabIndex)){
                    fileAllPath = DataGridUtils.XML_FILE_MAP[nTabIndex];
                }
                if (fileAllPath == null) {
                    return;
                }
                
                string csDataTime = FileUtis.ParseCsDataTime(fileAllPath);
                this.tabCtrl_fz.TabPages[nTabIndex].Controls.Find("lab_cstime_" + nTabIndex, false)[0].Text = csDataTime;
                    
                List<List<string>> datas = FileUtis.ParseData(fileAllPath);
                    
                foreach (List<string> rowData in datas) {
                    DataGridViewRow row = new DataGridViewRow(); 
                    foreach (string col in rowData) {
                        DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell(); 
                        textboxcell.Value = col; 
                        row.Cells.Add(textboxcell);
                    }

                    ((DataGridView)((this.tabCtrl_fz.TabPages[nTabIndex].Controls.Find("dg_" + nTabIndex, false)[0]))).Rows.Add(row);
                        
                }
                    
            } else if (nTabIndex == 3) {
                InitSSXmlFileCombox();
            }
            
        }
        
        
        void Btn_saveClick(object sender, EventArgs e)
        {
            if (this.cs_mine_code.Text.Trim().Equals("")) {
                MessageBox.Show("煤矿代码不能为空");
                this.cs_mine_code.Focus();
                return;
            }
            if (this.filePath.Text.Trim().Equals("")) {
                MessageBox.Show("文件目录不能为空");
                this.filePath.Focus();
                return;
            }
            if (this.url.Text.Trim().Equals("")) {
                MessageBox.Show("ip地址不能为空");
                this.url.Focus();
                return;
            }
            if (this.port.Text.Trim().Equals("")) {
                MessageBox.Show("端口号不能为空");
                this.port.Focus();
                return;
            }

            this.btn_save.Enabled =false;
            ConfUtil.WritePrivateProfileString("CS_MINE_CODE", this.cs_mine_code.Text);
            ConfUtil.WritePrivateProfileString("FILENAME", this.filePath.Text);
            ConfUtil.WritePrivateProfileString("URL", this.url.Text);
            ConfUtil.WritePrivateProfileString("PORT", this.port.Text);
            this.btn_save.Enabled =true;
            MessageBox.Show("保存成功");
            InitXmlFilePath();
            FillFzDataGrid(this.tabCtrl_fz.SelectedIndex);
        }
        
        //tab change事件
        void TabCtrl_fzSelectedIndexChanged(object sender, EventArgs e)
        {
            FillFzDataGrid(this.tabCtrl_fz.SelectedIndex);
        }
        
        
        //grid添加行号事件
        void Dg_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            DataGridView  dg = (DataGridView)sender;
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
                                      e.RowBounds.Location.Y,
                                      dg.RowHeadersWidth - 4,
                                      e.RowBounds.Height);

            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
                dg.RowHeadersDefaultCellStyle.Font,
                rectangle,
                dg.RowHeadersDefaultCellStyle.ForeColor, 
                TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }
        
        //ss combox change事件
        void Cbox_ssSelectedIndexChanged(object sender, EventArgs e)
        {
            this.dg_3.Rows.Clear();
            string fileAllPath = this.cbox_ss.SelectedItem.ToString();
            fileAllPath = this.filePath.Text + "\\" + fileAllPath;
            if (fileAllPath == null) {
                return;
            }
            string csDataTime = FileUtis.ParseCsDataTime(fileAllPath);
            this.lab_cstime_3.Text = csDataTime;
                    
            List<List<string>> datas = FileUtis.ParseData(fileAllPath);
            foreach (List<string> rowData in datas) {
                DataGridViewRow row = new DataGridViewRow(); 
                foreach (string col in rowData) {
                    DataGridViewTextBoxCell textboxcell = new DataGridViewTextBoxCell(); 
                    textboxcell.Value = col; 
                    row.Cells.Add(textboxcell);
                }

                this.dg_3.Rows.Add(row);
                        
            }
        }
        
        
        void Btn_pathClick(object sender, EventArgs e)
        {
            FolderBrowserDialog path = new FolderBrowserDialog();
            path.ShowDialog();
            this.filePath.Text = path.SelectedPath;
        }
        void Dg_1CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
    
        }
        void Dg_2CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
    
        }
    }
}
  • 效果展示


1人推荐
随时随地看视频
慕课网APP