当前位置:编程学习 > C#/ASP.NET >>

新手请教combobox动态绑定数据的问题!

小弟想帮单位搞一个简单的应用小程序,用c#做,现在遇到点难题,问题如下:在程序的应用窗体上放置了两个combobox,combobox1和combbox2,另外还有label1、label2、label3三个标签,现在想要把一个csv格式文件里的数据绑定到combobox1和combobox2里面,csv文件里面如下所示(我复制了几条数据,实际有1010条):

Entry,入口站,EXIT,出口站,总里程,路段1,路段2,路段3,路段4
S0770,收费站1,S0770,收费站1,16.196,16.196,0,0,0
S0770,收费站1,S0771,收费站2,17.008,17.008,0,0,0
S0771,收费站2,S0770,收费站1,17.008,17.008,0,0,0
S0771,收费站2,S0771,收费站2,19.82,19.82,0,0,0
S1280,收费站3,S0770,收费站1,141.479,56.308,73.083,12.088,0
S1280,收费站3,S0771,收费站2,125.471,40.3,73.083,12.088,0
S1281,收费站4,S0770,收费站1,160.501,56.308,73.083,31.11,0
S1281,收费站4,S0771,收费站2,144.493,40.3,73.083,31.11,0
S4574,收费站5,S0770,收费站1,57.618,56.308,1.31,0,0
S4574,收费站5,S0771,收费站2,41.61,40.3,1.31,0,0
S4575,收费站6,S0770,收费站1,71.026,56.308,14.718,0,0
S4575,收费站6,S0771,收费站2,55.018,40.3,14.718,0,0
S5501,收费站7,S0772,收费站1,120.98,22.228,73.083,9.495,16.174
S5501,收费站7,S0773,收费站2,105.785,7.033,73.083,9.495,16.174
S5502,收费站8,S0770,收费站1,183.858,56.308,73.083,9.495,44.972
S5502,收费站8,S0771,收费站2,167.85,40.3,73.083,9.495,44.972

收费站1、收费站2属于路段1,收费站3、收费站4属于路段2,收费站5、收费站6属于路段3,收费站7、收费站8属于路段4,其中combobox1显示内容为绑定的“Entry”+“入口站”两列数据(内容不重复),combobox2显示内容为绑定的“exit”+“出口站”两列数据(内容不重复),当combobox1任选一项,combobox2任选一项,lable1显示的内容为两项对应的“总里程”这列的值,label2为“路段1”这列的值+“路段2”+“路段3”这列的值,lable3为“路段4”这列的值。

如果这个程序用数据库的方式绑定可能好办,但我不想用数据库,只想用写一个小程序就像绿色软件一样,就一个exe文件,搞了半天不知道如何写。特来求助大家。
我基本思路是这样,先在主窗体FrmMain_Load里面先自定义一个数据源:
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //自定义数据表
            DataTable list = new DataTable();
            list.Columns.Add(new DataColumn("eName", typeof(string)));
            list.Columns.Add(new DataColumn("xName", typeof(string)));
            list.Columns.Add(new DataColumn("allMil", typeof(float)));
            list.Columns.Add(new DataColumn("Mil01", typeof(float)));
            list.Columns.Add(new DataColumn("Mil02", typeof(float)));
            list.Columns.Add(new DataColumn("Mil03", typeof(float)));
            list.Columns.Add(new DataColumn("Mil04", typeof(float)));
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows.Add(list.NewRow());
            list.Rows[0][0] = "收费站1";
            list.Rows[0][1] = "收费站2";
            list.Rows[0][2] = 13.592;
            list.Rows[0][3] = 13.592;
            list.Rows[0][4] = 0;
            list.Rows[0][5] = 0;
            list.Rows[0][6] = 0;
            list.Rows[1][0] = "收费站1";
            list.Rows[1][1] = "收费站3";
            list.Rows[1][2] = 29.6;
            list.Rows[1][3] = 29.6;
            list.Rows[1][4] = 0;
            list.Rows[1][5] = 0;
            list.Rows[1][6] = 0;
            list.Rows[2][0] = "收费站1";
            list.Rows[2][1] = "收费站4";
            list.Rows[2][2] = 47.672;
            list.Rows[2][3] = 47.672;
            list.Rows[2][4] = 0;
            list.Rows[2][5] = 0;
            list.Rows[2][6] = 0;
            //定义收费站的列表框内容,且筛选重复
            List<String> iseName = new List<string>();
            List<String> isxName = new List<string>();
            for(int i=0;i< list.Rows.Count;i++)
            {
                string ename = list.Rows[i][0].ToString();                
                string xname = list.Rows[i][1].ToString();                
                if (iseName.Contains(ename) || isxName.Contains(xname))
                {
                    continue;
                }
                else
                {
                    iseName.Add(ename);
                    isxName.Add(xname);
                }
            }
            comboBox1.DataSource = iseName;
            comboBox1.DisplayMember = "eName";
            comboBox2.DataSource = isxName;
            comboBox2.DisplayMember = "xName";
        }
我这样通过主窗体预先加载的方式添加1000条左右的数据,不知道效率如何,这个程序运行占内存是不是很大,如何优化,另外三个lable赋值的问题,也不晓得怎么搞了,特求助大家。万分感激,我才开始学c#,想请教下各前辈。 --------------------编程问答-------------------- 哦,另外,窗体上还有一个btn1按钮,当combobox1任选一项,combobox2任选一项,点击按钮,lable1显示的内容为两项对应的“总里程”这列的值,label2为“路段1”这列的值+“路段2”+“路段3”这列的值,lable3为“路段4”这列的值。

--------------------编程问答-------------------- 将数据读取到DataTable中即可
C#读取CSV文件的方法

至于显示问题你可以利用DataTable.Select()方法,根据选定的combobox来做提交筛选数据 Datatable的Select()方法简介  --------------------编程问答-------------------- 做一个数据源,然后combobox绑定数据源 --------------------编程问答-------------------- 自己做个数据源,按我的方法这么写可行吗?有1000多条数据,写在一个exe文件里面是不是很占内存啊,另外还有没有更好的方法做数据源 --------------------编程问答--------------------
引用 2 楼  的回复:
将数据读取到DataTable中即可
C#读取CSV文件的方法

至于显示问题你可以利用DataTable.Select()方法,根据选定的combobox来做提交筛选数据 Datatable的Select()方法简介

我现在是不准备采用读取csv文件的方式,想自己按照csv的内容,自建一个数据源,然后绑定,筛选,我上面附的那段代码已经能实现combobox显示内容的筛选了,现在就是问题是如何在选择了combobox1和combobox2的项后,点击按钮,根据combobox1的项目判断它的项的值,比如combobox1的项目选择了收费站1or收费站2or收费站3or收费站4or收费站5or收费站6(或者入口站代码是开头为0或1或4的),lalbe2显示的是路段1列+路段2列+路段3列的值,lalbe2显示的是路段4列的值 --------------------编程问答-------------------- 哦,上面最后的“lalbe2显示的是路段4列的值”,为“lalbe3显示的是路段4列的值”
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,