webForumDet fria alternativet

Fylla en listbox

.NET

8 svar · 277 visningar · startad av cyprys

Medlem sedan dec. 20003 563 inlägg
Frågan#1

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()
Medlem sedan dec. 19991 072 inlägg
#2

Du kan göra typ så här:

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
Medlem sedan dec. 20003 563 inlägg
#3

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?

Medlem sedan dec. 19991 072 inlägg
#4

Jodå, det kan man också göra...byggde i förra exemplet bara vidare på din fråga om arraylist...

Dim drBlankRef As DataRow = dtData.NewRow()

drBlankRef.Item("Text") = "Välj"
drBlankRef.Item("Value") = "-1"

dtData.Rows.InsertAt(drBlankRef, 0)

Ditt "DataTable" heter här alltså "dtData"

Medlem sedan dec. 20003 563 inlägg
#5

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?

Medlem sedan dec. 19991 072 inlägg
#6

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".

Medlem sedan dec. 20003 563 inlägg
#7

Tack tack. Nu funkar det precis som jag vill. :)
Dessutom har man lite mer insikt i dataset m.m. :e

Medlem sedan apr. 20012 266 inlägg
#8

Har du testat detta?

Bilder1.DataTextField = "Text"
Bilder1.DataValueField = "ID"
Bilder1.DataSource = objcmd.ExecuteReader()
Bilder1.Databind()

Bilder1.Items.Insert(0, new ListItem("-- Välj bild nedan --", "#"))
Medlem sedan dec. 20003 563 inlägg
#9

Där var det enkla sättet jag var ute efter. :)
Det förra funkade super också. ;)

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)