| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2669 人关注过本帖
标题:[求助]怎么通过ListView更新数据库
只看楼主 加入收藏
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
结帖率:40%
收藏
 问题点数:0 回复次数:8 
[求助]怎么通过ListView更新数据库
这个问题想了好久,我能够成功将数据库中的数据在ListView中显示出来,可是当我选定了其中的一行时,怎么把这个选定行的记录的各个字段的值赋给我定义的变量,谢谢大家,这个问题我很急
搜索更多相关主题的帖子: 数据库 ListView 
2007-01-02 17:53
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
有个SelectedItem...Changed...事件,你找一下.

[此贴子已经被作者于2007-1-2 23:54:58编辑过]



飘过~~
2007-01-02 23:54
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
收藏
得分:0 
谢谢版主!我查了,没有找到啊,能够写点具体的代码吗?不过这倒是多了几个问题,真头疼
这是我建立的存储过程:
Create proc Sb_S_BS_Book
@Sno Varchar(15)
AS
Select Book.ID,Book.Name,BS.BeginDate,BS.RemainDays
From Students,BS,Book
Where Students.SID=BS.SID and BS.ID=Book.ID and Students.Sno=@Sno /*三张表,一张Book,一张Students,还有一张为BS[其中Book表和Students表的主键作为BS的外键]
在应用程序端,能够成功将表的内容显示在DataGrid中显示:
代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If mycon.State = ConnectionState.Closed Then
mycon.Close()
End If
Dim myset As New DataSet
Dim sqlstr As String = "Exec Sb_S_BS_Book @Sno='" & TextBox1.Text & "'"
Dim myda As New SqlDataAdapter(sqlstr, mycon)
myda.Fill(myset, "information")
DataGrid1.DataSource = myset.Tables("information")
End Sub/*成功执行*/
然而显示在ListView中却出现问题了,代码如下:
Private Sub FillDataToListView1()
Try
If mycon.State = ConnectionState.Closed Then
mycon.Open()
End If
Dim sqlstr As String = "Exec Sb_S_BS_Book @Sno='" & TextBox1.Text & "'"
Dim myda As New SqlDataAdapter(sqlstr, mycon)
Dim myset As New DataSet
myda.Fill(myset, "information")
Dim i As Integer
Dim item As ListViewItem
Dim Subitem2 As ListViewItem.ListViewSubItem
Dim Subitem3 As ListViewItem.ListViewSubItem
Dim Subitem4 As ListViewItem.ListViewSubItem
For i = 0 To myset.Tables("information").Rows.Count - 1
With myset.Tables("information").Rows(i)
item = New ListViewItem
Subitem2 = New ListViewItem.ListViewSubItem
Subitem3 = New ListViewItem.ListViewSubItem
Subitem4 = New ListViewItem.ListViewSubItem
item = .Item(0) & ""
Subitem2 = .Item(1) & ""
Subitem3 = .Item(2) & ""
Subitem4 = .Item(3) & ""
item.SubItems.Add(Subitem2)
item.SubItems.Add(Subitem3)
item.SubItems.Add(Subitem4)
ListView1.Items.Add(item)
End With
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
报错说:格式转换不正确
好!我又稍微改了一下:
将 item = .Item(0) & ""
Subitem2 = .Item(1) & ""
Subitem3 = .Item(2) & ""
Subitem4 = .Item(3) & ""
改为:
item = .Item("Book.ID") & ""
Subitem2 = .Item("Book.Name") & ""
Subitem3 = .Item("BeginDate") & ""
Subitem4 = .Item("BS.RemainDays") & "" 其余不变,这里变了一下
又说Book.ID不属于information
问题总结:
<1>在将数据库中的一张表和几张表的内容通过DataSet显示在DataGrid中没有问题,将数据库中的一张表显示在ListView中没有问题,然而将数据库中的几张表的内容显示在ListView中却出现问题,所以,我得出的结论是:将数据库中的几张表的内容显示在ListView中是不能办到的,我不知道我的结论是否正确,如果错误,望大家能够给我指出其中的错误,和应该注意的地方
<2>在ListView中我们能够通过Columns属性来提前设置其列的名称,在DataGrid中也能办到这一点吗?提前设置列的 名称
而不是在运行后自动显示
<3>还是ListView的问题,怎么把ListView中指定列的数据赋给指定的变量,有点代码更好,谢谢大家,看起来肯定很烦哈!呵呵

大家一起努力,共同打造未来!!
2007-01-03 01:39
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
收藏
得分:0 
怎么没有人回答啊,看来只有自己解决了,呵呵

大家一起努力,共同打造未来!!
2007-01-03 15:10
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
<1>在将数据库中的一张表和几张表的内容通过DataSet显示在DataGrid中没有问题,将数据库中的一张表显示在ListView中没有问题,然而将数据库中的几张表的内容显示在ListView中却出现问题,所以,我得出的结论是:将数据库中的几张表的内容显示在ListView中是不能办到的,我不知道我的结论是否正确,如果错误,望大家能够给我指出其中的错误,和应该注意的地方

我不知道你的结论是否正确 不过一个view不就合并了数据库的几张表了吗?

<2>在ListView中我们能够通过Columns属性来提前设置其列的名称,在DataGrid中也能办到这一点吗?提前设置列的 名称
而不是在运行后自动显示

设置Datagrid的column的header : dg.Columns(i).HeaderText = "XXXX"; 如果你的意思是指定bind的列名 无论WinForm还是WebForm都可以直接在属性窗口binding

<3>还是ListView的问题,怎么把ListView中指定列的数据赋给指定的变量,有点代码更好,谢谢大家,看起来肯定很烦哈!呵呵

对这个控件不熟悉 回头试试看~

2007-01-03 18:05
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
收藏
得分:0 
哈哈,谢谢楼上的朋友,
对于:<1>在将数据库中的一张表和几张表的内容通过DataSet显示在DataGrid中没有问题,将数据库中的一张表显示在ListView中没有问题,然而将数据库中的几张表的内容显示在ListView中却出现问题,所以,我得出的结论是:将数据库中的几张表的内容显示在ListView中是不能办到的,我不知道我的结论是否正确,如果错误,望大家能够给我指出其中的错误,和应该注意的地方
回复:这个结论是错误的,当时我错了一个小地方,而编译器报的错有很大的误导性
将 item = .Item(0) & "" 改为:item.Text = .Item(0) & ""
Subitem2 = .Item(1) & "" SubItem2.Text=.Item(1)&""
Subitem3 = .Item(2) & "" SubItem3.Text=.Item(2)&""
Subitem4 = .Item(3) & "" SubItem4.Text=.Item(3)&""
这样就行了
对与第三个问题:<3>还是ListView的问题,怎么把ListView中指定列的数据赋给指定的变量,有点代码更好,谢谢大家,看起来肯定很烦哈!呵呵
最好在SelectedIndexChanged事件中实现指定行字段的赋值
关键是ListView1.SeletedIndices(0) 或取当前行的索引
代码如下
Dim a As Integer
a = ListView1.SelectedIndices(0) '当前索引值给予a
TextBox1.Text = ListView1.Items(a).SubItems(1).Text
如果想实现其他的字段可以更改SubItems(?)里面的?,呵呵
当然也可以在ListView想对应的DataSet中取值,可见两者的本质都是一样的
然而对于问题<2>
<2>在ListView中我们能够通过Columns属性来提前设置其列的名称,在DataGrid中也能办到这一点吗?提前设置列的 名称
而不是在运行后自动显示
没有Column属性啊,只有 Columnheader属性,找了半天没有搞出来,呵呵

大家一起努力,共同打造未来!!
2007-01-04 09:20
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
VS2003中datagrid没有column属性 2005中的datageridview 就有了

建议你在Formload的时候bind一个空datatable达到显示列名的效果

MS VB每代内嵌的datagrid都是弱弱的 好在每代都有第三方datagrid

2007-01-04 11:08
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 

另外 listview上是有selectedindexchange事件的,这这里楼主可以实现比如刷新textbox之类的操作

我google了一下 发现好多文档提到了可以使用listview.selecteditem 得到listviewitem 再用listviewitem的index属性得到索引。
可是我VS2002,2003,2005一一试过来,根本没有selecteditem属性只有selecteditems,而这是一个collection。

SelectedIndices 这个collection应该就是被选中的行的索引集合(当允许多选的时候),selecteditems 是被选中的listviewitem的集合。
因此我觉得 ListView1.Items(ListView1.SelectedIndices(i)).SubItems(1).Text 和 ListView1.selecteditems(i).SubItems(1).Text 是等效的,
这里i是从0到ListView1.selecteditems.count(或者lv1.SelectedIndices.Count,这2个也应该是相等的)

时间所限 这个想法没经过测试楼主如果方便不妨试试是否正确


2007-01-04 12:00
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
收藏
得分:0 
哈哈,你很会思考问题的嘛!!,我们一起加油

大家一起努力,共同打造未来!!
2007-01-04 15:28
快速回复:[求助]怎么通过ListView更新数据库
数据加载中...
 
   



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

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