标题:listview中的数据存入数据库和从数据库中读取
只看楼主
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
结帖率:55.56%
 问题点数:0 回复次数:7 
listview中的数据存入数据库和从数据库中读取


如图,将ListView中的内容全部存到数据表中的菜单一项中,保存的时候正常,不过要是想从数据库中读取该数据将其显示到ListView中该如何实现啊
搜索更多相关主题的帖子: 数据库 数据表 如何 
2013-04-08 17:36
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
你保存的时候应该把listview中的每一行,每一列都用不同的分割符隔开过的吧.如果没有,请在保存的时候使用分割符
把数据读取出来以后,按行列分割到数组中,把数组显示在listview中就很简单了
2013-04-08 17:59
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
得分:0 
回复 2楼 yhlvht
我是用的List<>,遍历listview中的数据,存入List<>中,在将其存入数据库,这样可以么?还有那个分隔符该怎么用啊

[ 本帖最后由 Sephirose 于 2013-4-10 16:31 编辑 ]
2013-04-10 16:06
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
不管你用什么来存的,只要你取出来以后,可以还原成数组,List<>当然是可以的,但是需要取出来以后还原成类似于这样
List<string> list = new List<string>();
list.Add("1,2,3");
list.Add("4,5,6");
上面的代码执行以后,list里面有两项,这里每一项就代表一行数据,第1行里面的1,2,3代表这个listview有3列,每一列的数据分别是1和2和3,当然第2行的3列数据就是456了,这里是用了逗号来分割列数据的
也就是说,你从数据库里取出数据以后,你自己能分得清有多少行,每行有些什么数据就OK

然后循环数组,那就表示取每一行数据出来,转换成字符串数组
for(int i = 0; i < list.Count; i++)
{
    string[] str = Regex.Split(list[i], ",");  //像这样把每行的字符串传进第一个参数,第二个参数是分割符逗号,其它符号都可以,但需要跟你数据中分割的符号一致,这样如第一行就拆分成了string[]{"1","2","3"}
    ListViewItem lv = new ListViewItem(str);    //创建listview的行对象,参数string数组
    this.listView1.Items.Add(lv);        //把这一行对象加入到listview中
}

[ 本帖最后由 yhlvht 于 2013-4-10 18:17 编辑 ]
2013-04-10 18:15
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
得分:0 
回复 4楼 yhlvht
那应该如何取出啊,原来用的方法是
public string[] alt;
 using (SqlCommand cmd = new SqlCommand("select * from 挂单表 where 编号='" + id + "'", Sanck.con))
            {
                Sanck.con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    dr.Read();
                    this.alt = new string[6] { dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString(), dr[5].ToString(), dr[6].ToString() };

                }
                dr.Close();
                Sanck.con.Close();
            }
不过这个是要取出来后再还原成数组啊,而且这里面的数据有多少行,每一行的内容都不确定啊
2013-04-11 15:28
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
你用一个一维数组怎么可能装得下
你是多行,if (dr.HasRows)怎么行啊,这只取一行呀,至少是while(dr.HasRows)
你现在也很好弄啊,再定义一个ArrayList
每行数据就像你现在之样,new的一个新数组,这样你每行数据就已经是数组了,然后你把这个数组装到ArrayList里面,ArrayList的每一项就是一个string[],也就代表每一行
到时候你循环ArrayList,从里面取出的每一行数据,直接就是一个数组
然后直接把这个数组往ListViewItem lv = new ListViewItem(str)参数里面扔
最后this.listView1.Items.Add(lv); 就OK了
2013-04-11 17:29
Sephirose
Rank: 1
来 自:四川-乐山
等 级:新手上路
帖 子:51
专家分:0
注 册:2013-3-26
得分:0 
回复 6楼 yhlvht
我的这个是读取的整个数据表里的内容,前面有一行代码是点击DataGridView然后获取点击行的ID,然后再在这下面读取这一行的信息,就是那整张表里的内容,包括什么价格,会员名什么的,我这个方法可以获得那张表里的其他的内容,但是无法读出表中菜单那一项的内容,我的整个listview里的信息都是存在菜单那一项里的,现在就是那一项读不出来,不清楚该怎么将其读出,在将值传到listview控件中
2013-04-12 13:32
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
我有点懂了,你取listview中数据,做保存的时候,全部搞到一个字符串,然后存到菜单这一列去了
你取的时候这样弄,比如string str = "";用于保存到菜单列中的这个字符串
for(循环listview每1行)
{
    str += 编号 + "\t" + 产品编号 + "\t" + 名称 + "\t" + 数量...... + "\r\n";
}
str = str.TrimEnd("\r\n".ToCharArray());

这样子行与行是用\r\n隔开的,每行列与列是用\t隔开的
后面你从库里取出这个字符串以后
string[] rows = Regex.Split(数据库中取出的字符串, "\r\n");
rows数组里面装的就是每一行数据
for(rows数组)
{
   string[] cols = Regex.Split(rows, "\t");
   ListViewItem lv = new ListViewItem(cols);
   this.listView1.Items.Add(lv);
}
2013-04-12 14:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-403346-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.171652 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved