Innan fyllde jag en listbox med ett dataset(). Problemet var att jag inte lyckades lägga till en rad längst upp i listboxen som skylle vara tomt på listbox.value. Jag bytte till detta och har stött på ett till problem. Det funkar med koden nedan men problemet är att jag vill ha olika värden i value och text. Försökte skapa en 2-dimensionell array men det ville sig inte.
Vilket är det bästa sättet att få in varsin kolumn i value/text?
Dim conn As new OledbConnection(Application("connstring"))
Dim objcmd As new OleDbCOmmand("SELECT titel & ' - ID: ' & id as newkolumn, id FROM bildarkiv ORDER BY titel", conn)
Dim aBilder As ArrayList = new ArrayList()
Dim Rs as OleDbDataReader
abilder.Add("-- Välj bild nedan --")
conn.open()
Rs = objcmd.ExecuteReader()
while Rs.Read()
abilder.Add(Rs("newkolumn"))
end while
conn.close()
Bilder1.DataSource = abilder
Bilder1.Databind()
Dim alData As New ArrayList()
alData.Add(New DataType("Text 1", 1))
alData.Add(New DataType("Text 2", 2))
ListBox1.DataTextField = "Text"
ListBox1.DataValueField = "ID"
ListBox1.DataSource = alData
ListBox1.Databind()
Public Class DataType
Private m_Text As String
Private m_ID As Integer
Friend Sub New(ByVal Text As String, ByVal ID As Integer)
m_Text = Text
m_ID = ID
End Sub
Public ReadOnly Property Text() As String
Get
Return m_Text
End Get
End Property
Public ReadOnly Property ID() As Integer
Get
Return m_ID
End Get
End Property
End Class
Hmm. Behöver man verkligen skapa en helt ny klass.
Om man vinklar och skapar med ett dataset() så funkar det med datavaluefield, men hur lägger man till en tom rad högst upp i sådana fall?
Ok. Jag är med men en sista grej så fixar det sig nog.
När jag skapar mitt dataset så skapar jag det utan att bilda en datatable. Samt att jag skulle vilja smyga in den tomma raden högst upp i mitt dataset innan jag fyller den med datan från databasen. Hur lösa detta smidigt?
Då ett "DataSet" bygger på "DataTable" så har du ett DataTable ändå...DataSet.Tables() returnerar nämligen ett DataTable.
Jag tror däremot att du måste lägga till den tomma raden efter du har fyllt DataSet.et från Databasen.
Om du har ett DataSet kan du ist. använda:
Dim drBlankRef As DataRow = dsData.Tables(0).NewRow()
drBlankRef.Item("Text") = "Välj"
drBlankRef.Item("Value") = "-1"
dsData.Tables(0).Rows.InsertAt(drBlankRef, 0)
...där alltså ditt "DataSet" heter "dsData".
Om du inte använder de övriga funktionerna i ett DataSet (såsom relationer tex) kan du lika gärna använda ett DataTable. Funkar på samma sätt med "Fill", bindings osv. Men har (rimligtvis) mindre "overhead".