代码改变世界

C++ Builder 中StringDrid简单使用示例

2014-08-11 14:59  fuimaz  阅读(1619)  评论(0)    收藏  举报

最近在学校里参加了个项目是在C++ Builder上进行开发的,刚开始我的任务是,利用CBC里的控件搞出一个类似与C#里DataGirdView的表格显示导入数据。我浏览了CBC控

件栏里的关于form的控件,发现了TStringGrid这个控件符合要求,不过外观看起来不如C#里DataGirdView那么美观。然后上网搜索关于这个控件的使用示例,发现真是少的可伶

,几乎为零。算了,我在C#里折腾过DataGridView,这也是个表格控件,用起来不会差很多自己折腾下。顺便说下,本人是刚参加项目的几个月的新人,第一次用C++ Builder,

希望以后有新人要用到StringGrid里看到我的文章可以少走一些弯路。在这里我演示下,利用文件选择对话框选择文件,并将文本格式文件导入到StringGrid的代码。

 

1 //---------------------------------------------------------------------------
 2 
 3 #include <vcl.h>       
 4 #include <string>                  //添加这两个头文件对字符进行处理
 5 #include <cctype>                  //添加这两个头文件对字符进行处理
 6 #pragma hdrstop
 7 
 8 #include "Unit1.h"
 9 //---------------------------------------------------------------------------
10 #pragma package(smart_init)
11 #pragma resource "*.dfm"
12 TForm1 *Form1;
13 //---------------------------------------------------------------------------
14 __fastcall TForm1::TForm1(TComponent* Owner)
15     : TForm(Owner)
16 {
17 }
18 //---------------------------------------------------------------------------
19 void __fastcall TForm1::btn1Click(TObject *Sender)
20 {
21     char *p ;
22     const char *d = " ";   //定义分隔符
23     if(!dlgOpen1->Execute()) return ;
24     TStringList *sl = new TStringList();     //利用StringList加载文件
25     sl->LoadFromFile(dlgOpen1->FileName);
26 
27     AnsiString _str;
28     int maxCol = 0, rowix = grid1->RowCount - 1; //从已有行的最后一行开始添加
29     grid1->ColCount = 3;
30     grid1->Cells[0][0] = "Xcoord";             //定义第一行的列名,在属性栏里设置FixedRow为1可以将第一列固定
31     grid1->Cells[1][0] = "Ycoord";
32     grid1->Cells[2][0] = "Zcoord";
33     for(int i = 0; i != sl->Count; i++)  //用for循环对文本文件的每一行进行字符分割
34     {
35         int colix = 0;
36         _str = sl->Strings[i].SubString(0,sl->Strings[i].Length()-1);
37         if(_str.IsEmpty())  continue ;
38         p = strtok(_str.c_str(),d);       //分割字符数组
39         while(p)
40         {
41             grid1->Cells[colix][rowix] = p;      //添加到单元格中
42             p = strtok(NULL,d);
43             colix++;
44         }
45         rowix++;                       //增加行数
46         grid1->RowCount = rowix;
47     }
48 }
49 //---------------------------------------------------------------------------