Har problem med att få ut värden i en ListView i VB.net Ja det hjälpte med .value.tostring() På denna raden ska du inte använda tostring: tar jag bort .value.toString() Jo men du ska ta bort till tostring! Det gjorde att du kom en rad längre! Du kom i och med det in i if satsen på första raden där du försöker lägga in en subitems. Tidigare kom du in i subitems där du lade in NOLL. YES!recordset problem
Men får bara följande fel hela tiden.
"Unable to cast COM object of type 'System.__ComObject' to class type 'System.String'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface."
Vad gör jag för fel????
I min Form har jag gjort enligt nedan
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim maxcols
Dim A
Dim B
Dim Key As String
ListView1.View = View.Details
ListView1.Columns.Clear()
ListView1.Items.Clear()
' starta connection
InitADO(4)
rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)
If Not rst.EOF Or rst.BOF Then
maxcols = rst.Fields.Count - 1
For A = 0 To maxcols
ListView1.Columns.Add(rst(A).Name)
ListView1.LabelWrap = True
Next
B = 1
Do While Not rst.EOF
Key = Chr(B + 64)
ListView1.Items.Add(B, Key & Str(A), rst(0)) ' <-----HÄR UPPKOMMER FELET
For A = 1 To maxcols
If IsDBNull(rst(A)) Then
ListView1.Items(B).SubItems.Add(rst(A))
Else
ListView1.Items(B).SubItems.Add("NOLL")
End If
B = B + 1
Next
rst.MoveNext()
Loop
rst.Close()
End If
' stäng connection
ClearADO()
End Sub
Och i modul
Module Module1
Public con As ADODB.Connection
Public rst As ADODB.Recordset
Public Enum dbDatabaseType
dbSQLServer = 1
dbOracleServer = 2
dbAccess = 3
dbdBase = 4
End Enum
Public Enum dbRecordsetType
dbOpenAstable = 1
dbOpenAsquery = 2
End Enum
Public Function InitADO(ByVal DatabaseType As dbDatabaseType) As Boolean
con = New ADODB.Connection
rst = New ADODB.Recordset
Dim ConnectionString As String
' access utan dsn
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\sample.mdb"
' access eller sql med dsn
'ConnectionString = "DSN=Testaren;uid=guest;pwd=demo"
' öppnar anslutningen
On Error Resume Next
con.Open(ConnectionString)
If con.Errors.Count > 0 Then
MsgBox("Anslutningen misslyckades!" & vbCrLf & _
con.Errors(0).Description)
ClearADO()
End
Else
MsgBox("Du är ansluten till databasen")
End If
End Function
Public Sub ClearADO()
rst = Nothing
con = Nothing
End Sub
Public Function CreateRecordset(ByVal Indata As String, ByVal RecordsetType As dbRecordsetType) As ADODB.Recordset
Dim rsTmp As New ADODB.Recordset
' Input: Indata
' Här kan du antigen ange ett tabellnamn
' eller en select-sats
' Retur: CreateRecordset
' Det data som returneras
Select Case RecordsetType
Case 1
'rsTmp.CursorLocation = adUseClient
rsTmp.CursorLocation = CursorLocationEnum.adUseClient
rsTmp.Open(Indata, con, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockBatchOptimistic)
Case Else
rsTmp = con.Execute(Indata)
End Select
CreateRecordset = rsTmp
rsTmp = Nothing
End Function
End Module
recordset problem och Listview.subitems
Så nu fungerar den biten med just att fylla subitems på listview korrekt.
Columnerna blir rätt
fyller första raden med de tre columnerna
men på andra och resterande raden fylls enbart första kolumen som innehåller ett idnummer från tabellen.
Någon som har ett bra tips på att lösa det hela?
Jag blir inte klok och hittar inget på nätet heller...
VB.net som sagt.
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim MaxCols As Integer
Dim A
Dim B As Integer
Dim Key As String
B = -1
ListView1.View = View.Details
ListView1.Columns.Clear()
ListView1.Items.Clear()
' starta connection
InitADO(4)
rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)
If Not rst.EOF Or rst.BOF Then
maxcols = rst.Fields.Count - 1
For A = 0 To maxcols
ListView1.Columns.Add(rst(A).Name)
'ListView1.LabelWrap = True
Next
B = B + 1
Do While Not rst.EOF
Key = Chr(B + 64)
ListView1.Items.Add(Key & Str(A), rst(0).Value.ToString, B)
For A = 1 To maxcols
If Not IsDBNull(rst(A).Value.ToString) Then
ListView1.Items(B).SubItems.Add(rst(A).Value.ToString)
Else
ListView1.Items(B).SubItems.Add("NOLL")
End If
Next
rst.MoveNext()
Loop
rst.Close()
End If
' stäng connection
ClearADO()
End Sub
Sv: recordset problem och Listview.subitems
If Not IsDBNull(rst(A).Value.ToString) ThenSv:recordset problem och Listview.subitems
så får jag följande Error:
så det fungerar inte alls.
HJälp!
Error 1 Overload resolution failed because no accessible 'Add' can be called without a narrowing conversion:
'Public Function Add(text As String) As System.Windows.Forms.ListViewItem.ListViewSubItem': Argument matching parameter 'text' narrows from 'ADODB.Field' to 'String'.
'Public Function Add(item As System.Windows.Forms.ListViewItem.ListViewSubItem) As System.Windows.Forms.ListViewItem.ListViewSubItem': Argument matching parameter 'item' narrows from 'ADODB.Field' to 'System.Windows.Forms.ListViewItem.ListViewSubItem'. C:\Documents and Settings\Joacim Linnéll\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.vb Sv: recordset problem och Listview.subitems
Felmeddelandet säger att det blir fel på raden:
ListView1.Items(B).SubItems.Add(rst(A).Value.ToString)
Varför detta blir fel i vb.net är jag inte riktigt säker på då jag mestadels håller på med C#. Titta i dokumentationen för ListView.subitems.Sv:recordset problem och Listview.subitems
Tack för all hjälp Jenny.
NU har det löst sig hade satt B=B+1 på felställe, ska sitt inne i Do While.
och rensade lite i koden så här blev det.
Dim MaxCols As Integer
Dim A As Integer
Dim B As Integer
Dim Key As String
B = -1
ListView1.View = View.Details
ListView1.FullRowSelect = True
ListView1.GridLines = True
ListView1.Columns.Clear()
ListView1.Items.Clear()
' starta connection
InitADO(4)
rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)
If Not rst.EOF Or rst.BOF Then
maxcols = rst.Fields.Count - 1
For A = 0 To CInt(MaxCols)
ListView1.Columns.Add(rst.Fields(A).Name)
'ListView1.LabelWrap = True
Next
Do While Not rst.EOF
B = B + 1
Key = Chr(B + 64)
ListView1.Items.Add(Key & Str(A), rst.Fields(0).Value.ToString, B)
For A = 1 To CInt(MaxCols)
ListView1.Items(B).SubItems.Add(rst.Fields(A).Value)
Next
rst.MoveNext()
Loop
rst.Close()
End If
' stäng connection
ClearADO()
End Sub