精华内容
下载资源
问答
  • 列表控件怎样读取文件
    2021-08-25 10:18:16

    CFile类与列表控件的综合应用

    使用什么样的方法从文件获取到的内容才方便给列表使用???

    如果使用一行一行读取数据,把每一行放入一个CString数组对象中,那么又怎么把每一行中以空格为分割的每一个子数据单独拿出来呢???

    //*****1、创建表头,即列名,列从1开始计算
        m_allstudent.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);//样式
        m_allstudent.InsertColumn(1, _T("学号"), LVCFMT_CENTER, 150);
        m_allstudent.InsertColumn(2, _T("姓名"), LVCFMT_CENTER, 100);
        m_allstudent.InsertColumn(3, _T("年龄"), LVCFMT_CENTER, 50);
        m_allstudent.InsertColumn(4, _T("性别"), LVCFMT_CENTER, 50);
        m_allstudent.InsertColumn(5, _T("出生年月"), LVCFMT_CENTER, 100);
        m_allstudent.InsertColumn(6, _T("地址"), LVCFMT_CENTER, 100);
        m_allstudent.InsertColumn(7, _T("电话"), LVCFMT_CENTER, 100);
        m_allstudent.InsertColumn(8, _T("E-mail"), LVCFMT_CENTER, 171);
    ​
    //*****2、获取文件中数据、并进行处理方便使用
    //2.1、从文件一行一行取出数据、每一行给一个CString数组保存
        CStdioFile fin;
        CString FileName = _T("A:\\student.txt");
        fin.Open(FileName, CFile::modeRead);
        //逐行读取字符串
        CStringArray stusave;
        CString temp;
        int n = 0;
        while (fin.ReadString(temp))//逐行读取的内容存入参数中
        {//这里的Reading函数有程序bug,必须要到文件中敲一下空格,再删除,读出来的数据才是整行,不然就是只有第一个空格前面的数据
            stusave.Add(temp);
            temp = ' ';
            n++;//学生个数,实际个数减1
        }
    ​
    //2.2、处理每行的数据,每行中以空格为分割把每一个小值取出来,即分割字符串的技术
        CStringArray sno;
        CStringArray sname;
        CStringArray age;
        CStringArray sex;
        CStringArray born;
        CStringArray address;
        CStringArray phone;
        CStringArray emails;
    ​
        for (int j = 0; j < n; j++)
        {
            int nPos = 0;
            int nPre_pos = 0;
            int count = 0;//用来定位属性在st里面的位置
            while (-1 != nPos) {//一次循环可以查一个小属性
                nPre_pos = nPos;
                nPos = stusave[j].Find(' ', (nPos + 1));
                //从(nPos + 1)开始找空格,找到就返回空格位置
                switch (count)
                {
                case 0:
                    sno.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 1:
                    sname.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 2:
                    age.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 3:
                    sex.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 4:
                    born.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 5:
                    address.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 6:
                    phone.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                case 7:
                    emails.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                        //文件每行的末尾必须有空格才能取出最后一个数据
                default:
                    break;
                }
                count++;
            }
        }
    ​
    //*****3、创建列表的行、并给每列赋值
        for (int i = 0; i < n ; i++)
        {
            //这里的列从0开始计数
            m_allstudent.InsertItem(i, _T("")); // 首先创建一个行,接下来在这个行插入每列的值
            m_allstudent.SetItemText(i, 0, sno[i]); // 设置第2列(姓名)
            m_allstudent.SetItemText(i, 1, sname[i]); // 设置第3列(年龄)
            m_allstudent.SetItemText(i, 2, age[i]); // 设置第4列(性别)        
            m_allstudent.SetItemText(i, 3, sex[i]); //参数依次代表:行、列、内容
            m_allstudent.SetItemText(i, 4, born[i]);
            m_allstudent.SetItemText(i, 5, address[i]);
            m_allstudent.SetItemText(i, 6, phone[i]);
            m_allstudent.SetItemText(i, 7, emails[i]);
        }
    更多相关内容
  • MFC读取txt,分割显示到listctrl控件上----代码 MFC读取txt,分割显示到listctrl控件上----代码
  • VB实现不使用窗体控件读取RTF文件的内容,读取RTF,这个好像需要使用RichText.ocx控件,不过本源码所演示的方法,并没有使用此控件,同样可准确读取并获取RTF文档的内容,如本截图所示,点击窗口中的对应按钮,即可...
  • 使开发人员可以对 VSD, VSDX, VSS, VST, VSX, VTX, VDW and VDX文件进行打开、操作和导出的控件,在ASP .NET网页应用程序、web服务器和Windows应用程序上的VSD和VDX 文件中,开发者都可以以使用
  • MFC读取txt,分割显示到listctrl控件上 MFC读取txt,分割显示到listctrl控件上 MFC读取txt,分割显示到listctrl控件上 MFC读取txt,分割显示到listctrl控件
  • Excel文件读取控件读取速度非常快。现在用于我自己的项目,非常好用。
  • vc++ 列表控件的典型应用,从文件读取并显示
  • 一文讲清Python PyQt5的控件如何实现拖放获取文件路径 内部以QLineEdit为例子,从新类创建,代码理解,到融入项目均详细讲解。
  • MFC_列表CListCtrl读写Excel文件,刚写完,亲测可用,不懂可学一下CListCtrl的用法。介绍一下:输入excel文件列表&&输出列表到excel文件,需要1、向项目工程中添加基本的7个类,分别是:CApplication,CMyFont,...
  • 为了提高试题文件的安全性,在存储文件到Access数据库表时,对文件的二进制数据进行异或运算,而在读取文件时,对读取到的二进制数据进行同样的异或运算。程序调试表明,基于VB程序,可以在Access表中存储与读取各种...
  • c# 从零创建winform窗体控件实现读取.dat文件数据、在dataGridView中显示数据、输出Excel文件

    目录

    01  前言

    02 创建winform窗体应用项目

    1 “浏览文件”自定义控件的制作

    2 DataGirdView控件读取.dat文件数据并显示

    2.1 添加DataGridView控件

     2.2 通过Button控件往表格中添加数据

    3 将显示在DataGirdView中的数据导出到Excel表格文件

    4. 重写OnLayout方法,让窗口中的控件大小随窗口大小自适应。


    01  前言

    因为最近要用到winform制作插件,学习了c#和winform控件基础功能,以一个小项目进行练习,在此记录一下。

    本项目实现如下功能:

    1. 通过浏览文件的形式读取.dat文本数据;

    2. 使用dataGridView控件显示数据;

    3. 点击导出Excel按钮输出Excel文件;

    4. 控件大小随窗口大小的改变自适应。

    制作的窗口如下图。

    02 创建winform窗体应用项目

    选c#;Windows;桌面;Windows窗体应用;(没有的话需要先安装一下)

    1 “浏览文件”自定义控件的制作

     在工具箱里拖进去一个TextBox控件和PictureBox控件。调整大小和位置如下图。

     这里也可用Button控件代替PictureBox控件,用到的都是Click事件,效果是一样的。

     

    在属性里面修改text文本框的(Name)属性。改名字是为了程序里面调用的时候好区分。

     修改ImageBox控件的(Name)和Image属性。Image属性用来更改图标样式(这里的图标来源于iconfont-阿里巴巴矢量图标库,搜索“打开”关键字即可下载,文件名最好别用汉字)

     给ImageBox控件添加一个Click事件。在自动生成的Click事件中添加点击事件处理程序。

    代码如下:

            private void Search_btn_Click(object sender, EventArgs e) {
                //浏览文件
                OpenFileDialog openFileDialog2 = new OpenFileDialog();
                openFileDialog2.Multiselect = false;  //该值确定是否可以选择多个文件
                openFileDialog2.Title = "请选择文件";
                openFileDialog2.Filter = "文档(*.dat;*.txt)|*.dat;*.txt";
                if (openFileDialog2.ShowDialog() == DialogResult.OK) {
                    if (openFileDialog2.FileName != "") {
                        this.Search_text.Text = openFileDialog2.FileName;
                    }
                }
            }

    控件使用效果如下:选择文件后左侧自动出现文件路径和名称

     为什么要自定义一个控件?其实可以直接在form1中直接添加TextBox控件和ImageBox控件实现同样的功能,只是这样封装成一个控件觉得可以练习一下制作自定义控件,也方便以后直接拿来用。

    2 DataGirdView控件读取.dat文件数据并显示

    2.1 添加DataGridView控件

     给DataGridView控件添加列。因为这需要显示的表格数据列名是固定的,所以可以直接编辑添加。点击添加的DataGridView控件,点击右上角会出现的小三角 , 点击编辑列。

     

     2.2 通过Button控件往表格中添加数据

    从工具箱中拖入一个Button控件。在属性栏中修改(Name)属性和Text属性,Text属性用于更改按钮上显示的文字。

     在事件栏中添加一个Click事件。跟之前一样,鼠标点一下Click事件右侧按回车键即可自动生成点击事件。

     

     在Click事件中添加如下代码。程序思路:先按条件筛取.dat文件中有用的一行数据存入input中,然后分别截取有用的数据段赋值给对应的每一列。

            /// <summary>
            /// 获取两个字符串中间的字符串
            /// </summary>
            /// <param name="str">要处理的字符串,例ABCD</param>
            /// <param name="str1">第1个字符串,例AB</param>
            /// <param name="str2">第2个字符串,例D</param>
            /// <returns>例返回C</returns>
            private string GetBetweenStr(string str, string str1, string str2) {
                int i1 = str.IndexOf(str1);
                if (i1 < 0) //找不到返回空
                {
                    return "";
                }
    
                int i2 = str.IndexOf(str2, i1 + str1.Length); //从找到的第1个字符串后再去找
                if (i2 < 0) //找不到返回空
                {
                    return "";
                }
    
                return str.Substring(i1 + str1.Length, i2 - i1 - str1.Length);
            }
    
            //确定按钮点击事件
            private void button_Confirm_Click(object sender, EventArgs e) {
                //点击确认按钮事件,读取.dat文件数据并显示出来,弹出对话框“数据已显示”
                //先确认是否选择了正确文件
                string filePath = SearchBox1.Search_text.Text;//文件地址
                string fileExt = Path.GetExtension(filePath).ToLower();//获取文件的拓展名
                string fileNameData = Path.GetFileName(filePath);
                if (!File.Exists(filePath)) {
                    MessageBox.Show("文件不存在");
                    return;
                }
                if (!(fileExt == ".dat")) {
                    MessageBox.Show("请选择.dat格式文件");
                    return;
                }
                using (StreamReader sr = File.OpenText(filePath)) {
                    string input; //存放.dat文件的单行数据
                    while ((input = sr.ReadLine()) != null) { //循环取出.dat文件的每行数据
                        //判断前十位是否为DECL E6POS
                        if (input.Contains("DECL E6POS")) {
                            Console.WriteLine(input);
                            string name = GetBetweenStr(input, "E6POS ", "=");
                            string X = GetBetweenStr(input, "X ", ",");
                            string Y = GetBetweenStr(input, "Y ", ",");
                            string Z = GetBetweenStr(input, "Z ", ",");
                            string A = GetBetweenStr(input, "A ", ",");
                            string B = GetBetweenStr(input, "B ", ",");
                            string C = GetBetweenStr(input, "C ", ",");
                            //创建一个object[7]存表格中的一行数据,一共7列
                            object[] row = new object[7];
                            row[0] = name; row[1] = X; row[2] = Y;
                            row[3] = Z; row[4] = A; row[5] = B; row[6] = C;
                            //在dataGridView1中新建一行并将存在row中的数据写入
                            dataGridView1.Rows.Add(row);
                        }
                    }
                    sr.Close();
                }

    3 将显示在DataGirdView中的数据导出到Excel表格文件

    添加Button控件。修改(Name)属性和Text属性。

     添加Click事件。

    在自动生成的Click事件是添加下面代码。

            private void saveButton_Click(object sender, EventArgs e) {
                //保存按钮,弹出对话框选择保存路径和文件名
                //验证是否有文件
                //弹出对话框浏览保存路径和文件名称
                string filePath = SearchBox1.Search_text.Text; //.dat文件地址
                string fileNameData = Path.GetFileNameWithoutExtension(filePath); //.dat文件名
                string fileName = fileNameData; //可以在这里设置默认文件名
                string saveFileName = ""; //文件保存名
                SaveFileDialog saveDialog = new SaveFileDialog(); //实例化文件对象
                saveDialog.DefaultExt = "xlsx";//文件默认扩展名
                saveDialog.Filter = "Excel文件|*.xlsx";//获取或设置当前文件名筛选器字符串,该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容。
                saveDialog.FileName = fileName;
                saveDialog.ShowDialog();//打开保存窗口给你选择路径和设置文件名
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null) {
                    MessageBox.Show("无法创建Excel对象,您的电脑可能未安装Excel");
                    return;
                }
                Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;//Workbooks代表一个 Microsoft Excel 工作簿
                Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);//新建一个工作表。 新工作表将成为活动工作表。
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
                                                                                                                                      //写入标题             
                for (int i = 0; i < dataGridView1.ColumnCount; i++)//遍历循环获取DataGridView标题
                { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; }// worksheet.Cells[1, i + 1]表示工作簿第一行第i+1列,Columns[i].HeaderText表示第i列的表头
                //写入数值
                for (int r = 0; r < dataGridView1.Rows.Count; r++)//这里表示数据的行标,dataGridView1.Rows.Count表示行数
                {
                    for (int i = 0; i < dataGridView1.ColumnCount; i++)//遍历r行的列数
                    {
                        worksheet.Cells[r + 2, i + 1] = dataGridView1.Rows[r].Cells[i].Value;//Cells[r + 2, i + 1]表示工作簿从第二行开始第一行保存为表头了,dataGridView1.Rows[r].Cells[i].Value获取列的r行i值
                    }
                    System.Windows.Forms.Application.DoEvents();//实时更新表格
                }
                worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
                MessageBox.Show(fileName + "资料保存成功", "提示", MessageBoxButtons.OK);//提示保存成功
                if (saveFileName != "")//saveFileName保存文件名不为空
                {
                    try {
                        workbook.Saved = true;//获取或设置一个值,该值指示工作簿自上次保存以来是否进行了更改
                        workbook.SaveCopyAs(saveFileName);  //fileSaved = true;将工作簿副本保存到文件中,但不修改内存中打开的工作簿                 
                    }
                    catch (Exception ex) {//fileSaved = false;                      
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }
                }
                xlApp.Quit();
                GC.Collect();//强行销毁
            }

    4. 重写OnLayout方法,让窗口中的控件大小随窗口大小自适应。

    效果如下:

    实现代码如下:

    protected override void OnLayout(LayoutEventArgs levent) {
                //1 调用父类的OnLayout(),不是必需的
                base.OnLayout(levent);
                //2 获取窗口大小 ClientSize (仅客户区,不含标题栏)
                int w = this.ClientSize.Width;
                int h = this.ClientSize.Height;
                //3 计算每一个控件的位置和大小
                int yoff = 0;//此变量用于设置间隔
                yoff = 30;//第一行控件距顶部的间隔
    
                this.SearchBox1.Location = new Point(30, yoff);
                this.SearchBox1.Size = new Size(w - 145, 30);
    
                this.button_Confirm.Location = new Point(w - 110, yoff);
                this.button_Confirm.Size = new Size(80, 30);
    
                yoff += 30;//the height of the first row
                yoff += 5;//与上一行控件的间隔
                this.dataGridView1.Location = new Point(30, yoff);
                this.dataGridView1.Size = new Size(w - 60, 300);
    
                yoff += 300;//the height of the second row
                yoff += 5;//与上一行控件的间隔
                this.saveButton.Location = new Point(w - 160, yoff);
                this.saveButton.Size = new Size(130, 30);
            }

    说明:本文中的许多代码来源于CSDN、B站视频等,部分链接如下,有些是边学边写的可能会遗忘一些原文链接。

    b站教程:https://b23.tv/LUcoVRM

    C#:获取两个字符串中间的字符串_小鸿1983的博客-CSDN博客

    C# DataGridView数据导出Excel文件_IC00的博客-CSDN博客_c# datagridview 导出到excel

    展开全文
  • 提示用户选1文件, 打开文件后,读取以上数据,存放入数据结构中。 将数据显示在对话框中的CListCtrl下,以列表形式。 COMBOBOX控件中显示上面文件中的地名,增加“全部” 如果用户选取某个城市,则在列表中显示该...
  • C#读取加密Excel文件

    2019-10-30 14:15:31
    不是采用第三方控件NPOI读取加密的Excel文件。 开始研究NPOI读取加密的Excel文件,没有研究出来,后来才改用Microsoft.Office.Interop.Excel读取加密的Excle文件。若有那位大牛研究出NPOI读取加密的Excel文件,希望...
  • 列表控件在工作流表单中使用的频率还是很多的,多行数据填写时还是很方便的。而且通达系统设计了可以读取oa数据库,甚至外部的erp数据库等,更是方便多了。 只是个别时候,有些个性化的需求需要自定义选择一些数据...

    列表控件在工作流表单中使用的频率还是很多的,多行数据填写时还是很方便的。而且通达系统设计了可以读取oa数据库,甚至外部的erp数据库等,更是方便多了。

    只是个别时候,有些个性化的需求需要自定义选择一些数据,或者这次的情况是系统不能正常连接oracle数据库,只能临时现将数据导入到本地库里,然后使用列表控件的数据选择功能,然鹅这个功能也出现了bug,时间紧急只能自己先动手解决了。

    经过小飞鱼研究,采用如下解决方案:点击列表控件时弹出数据选择窗口,在数据窗口加载需要查询的数据,搜索后点击将数据返回给列表控件。

    jQuery(document).ready(function(){
        jQuery("#LV_26 td").click(function(){
          var tdSeq = jQuery(this).parent().find("td").index(jQuery(this)[0]);
          var trSeq = jQuery(this).parent().parent().find("tr").index(jQuery(this).parent()[0]);
    
    		if((tdSeq + 1)==2 || (tdSeq + 1)==3){
    	  		jQuery("#message").show();
    			jQuery("#frame1").attr("src","/XIAOFEIYU/API/workflow/wuliao.php?trid="+jQuery(this).parent().attr("id")+"");
    		}
    
        });
    })

    弹出窗口效果:

    展开全文
  • C#读取bin文件

    2021-01-10 21:00:15
    版本:VS2010 C#读取bin文件,并显示在TextBox控件内 版本:VS2010 C#读取bin文件,并显示在TextBox控件
  • 完美解决PB读取PDF文件问题PDFViewOCX-2020更新pb9版本,支持放大、缩小、跳转页面、适应页宽、适应页高等功能。
  • ini文件读取数据到控件.zip源码Labview个人项目资料程序资源下载ini文件读取数据到控件.zip源码Labview个人项目资料程序资源下载ini文件读取数据到控件.zip源码Labview个人项目资料程序资源下载ini文件读取数据到...
  • 可以保存所有界面上的控件数据,包括EDIT LISTCONTRL BUTTON之类的数据.比如标题,选中状态之类的到XML.再从XML加载到控件.通过遍历的方法.一劳永逸
  • VS2010下利用TeeChart控件写xml文件数据,并读文件数据到控件中显示。
  • VC 将txt中的内容读取到listctrl控件中,记得注意txt中内容的书写格式。如果看不懂可以给我留言。 VC 将txt中的内容读取到listctrl控件中,记得注意txt中内容的书写格式。如果看不懂可以给我留言。
  • 读取XML文件中的树状结构数据并用TreeView控件呈现.docx
  • 读取XML文件中的树状结构数据并用TreeView控件呈现.doc
  • #############实现功能################# 1,从ORG.XML文件中载入属性名为NAME的属性值 2,将属性值链接到树控件CTREECTRL上 3,再将树控件上的各数据保存至1.xml文件中 4,使用开源xml解析库,即tinyxml
  • 实例化DirectoryInfo对象,获取指定目录下的所有子目录及文件类型,/判断是否是文件夹,使用获取的文件夹名称实例化DirectoryInfo对象,为ListView控件添加文件夹信息,以列表形式显示文件夹的名称、文件大小和路径...
  • 试用版 试用版 Aspose.Tasks For .NET 试用版 试用版 开发语言: .NET/JAVA 可用平台: Visual Studio 2005-2013/...正如所有的Aspose.Tasks文件管理组件,Aspose.Tasks在WinForm和WebForm应用程序上都工作的很好。
  • 在Delphi下通过RzRegIniFile控件读取ini文件 有不足的地方请多多指教
  • 用vs2015实现.在vc++中使用MFC时常常为保存界面上的控件的内容或者状态写配置文件而重复劳动.本方法一步到位解决了这个问题.本方法还可以指定不保存某一个控件的内容.给出不保存的控件id即可.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,463
精华内容 52,585
热门标签
关键字:

列表控件怎样读取文件