2009-06-09 28 views
0

私はdropdownlistを持っており、特定の値と特定のテキストを入力したいと思っています。私はdatasourceを使用していませんが、手動で接続を行い、コードでデータを取得しています。このdropdownlistをどのように埋め込むことができますか? datareaderでデータを読み取り、配列をインクリメントすると、値またはテキストのいずれかしか得られません。これは私がこれまで持っているものであるが、それは完全に間違っている:ドロップダウンリストにデータを入力するにはどうすればよいですか?

//connection string etc goes here 
Dbcmd2.CommandText = "select dept,deptname from table" 

Dim dr As SqlClient.SqlDataReader 
    dr = Dbcmd2.ExecuteReader 
    Dim i As Integer 
    Dim arydept As New arraylist 
    While dr.Read 
     arydept.Add(dr1("dept")) 
    End While 

    ddldept.datasource = arydept 
    ddldept.DataTextField = ???????? 
    ddldept.DataValueField = dr("dept") 
    ddldept.DataBind() 

は、どのように私は、これはDepartmentのクラスオブジェクトを作成することなく、仕事を得ることができますか?とにかく、またはクラスオブジェクトを作成する必要がありますか?

答えて

4

通常のやり方で特別な理由はありますか?

Dbcmd2.CommandText = "select dept,deptname from table" 
Dim dr As SqlClient.SqlDataReader = Dbcmd2.ExecuteReader 
While dr.Read() 
    ddldept.Items.Add(new ListItem(dr("deptname"),dr("dept")) 
End While 
' ddldept is now populated with all items from the query 
+0

UPS、同じ文脈でDATAACCESSコードとビューコード、これが唯一のデモコードで - ません家の子供たちでこれをやって! – khebbie

+0

@khebbie:まあ、明らかに。しかし、私は、Ericがデータアクセスよりもコンボボックスを読み込むことにもっと関心があると思う。もし彼がカプセル化のためにそれを別のオブジェクトに包み込みたいのであれば、それは彼の責任です。しかし、彼はそれをする必要があります。聞こえます、エリック? – Welbog

+0

@Welbog私はあなたがこれを知っていると思っていました。子供が飛行機に乗り込んできて、「ああ、それはそれをやる方法です」 - そういうわけで私は警告を追加しました... No offend ! – khebbie

1

辞書オブジェクトを使用する場合はArrayListを使用する代わりに、名前と値を格納できます。このような

何かはそれを

Dim All As New Dictionary(Of String, String) 
All.Add("Test", 1) 
All.Add("Test2", 2) 
test.DataSource = All 
test.DataTextField = "Key" 
test.DataValueField = "Value" 
test.DataBind() 
+0

私はこの考えが好きで、これを将来使用します。私はどのように辞書を使用するか分からなかった。 +1 – Eric

1

代わりのデータソース/データバインド()アプローチを使用して行う必要があり、あなたは、単にリスト項目を作成し、ドロップダウンリストにそれらを追加することができます。

dr = Dbcmd2.ExecuteReader 
    Dim i As Integer 
    Dim arydept As New arraylist 

    ddldept.Items.Clear() 
    While dr.Read 
     ddldept.Items.Add(new ListItem(dr1("dept"), dr1("dept"))) 
    End While 
1

これはどうですか。

ddldept.Items.Clear() 

While dr.Read 
    ListItem item = New ListItem() 
    item.Text = dr("deptname").ToString() 
    item.Value = dr("dept").ToString() 

    ddldept.Items.Add(item) 
End While 
+0

すばらしい答え! +1 – Eric

2

あなたはすでにこれだけのDataTableとバインドにそのポップリーダーを使用している:

//connection string etc goes here 
Dbcmd2.CommandText = "select dept,deptname from table" 

Dim dr As SqlClient.SqlDataReader 
dr = Dbcmd2.ExecuteReader 
Dim myData as DataTable 
If dr.HasRows Then 
    myData.Load(dr) 
End If 

ddldept.datasource = myData 
ddldept.DataTextField = myData("myTextField") 
ddldept.DataValueField = myData("dept") 
ddldept.DataBind() 
+0

私はこのアイデアが本当に好きです! +1。決してこれについて考えていない – Eric

関連する問題