dポイントプレゼントキャンペーン実施中!

下記のようなロジックを動かそうとしていますが、うまくいきません。

「データベースからinteger型の値を取得して、それをreadメソッドでlistに一旦格納し、For Eachで1つずつGridviewに追加していく。」
エラー内容でググっても良くわからなかったので、解決策がわかる方がいましたらご助言お願い致します。。

*DBから値を取得し、listに格納するところは問題なく動いていますが、Gridviewに追加するところでこけます。

エラー箇所:GridView1.Columns.Add(item)
エラー内容:「型 'Integer' の値をを 'System.Web.UI.WebControls.DataControlField' に変換できません。」

Dim list As List(Of Integer) = New List(Of Integer)
Dim result As Integer = Byte.MinValue

Do While testReader.Read()
result = Convert.ToInt32(testReader("price"))
list.Add(result)
Loop

For Each item In list
GridView1.Columns.Add(item)
Next

A 回答 (2件)

☆確認


・ほんとにカラムでいいのですか?
・VS2008Pro+VBで試したソースを書いておきます。
・ImportsはSystem.DataとSystem.Web.UI.WebControlsです。

☆サンプルソース
' テストデータ作成(readerじゃないけど・・・)
Dim dt As DataTable = New DataTable()
Const fld As String = "price"
dt.Columns.Add(fld)
dt.Columns(fld).DataType = GetType(Integer)
For i As Integer = 0 To 3
Dim row As DataRow = dt.NewRow()
row(fld) = i
dt.Rows.Add(row)
Next

' 本題(とりあえず題名通りListに追加)
Dim list As List(Of Integer) = New List(Of Integer)
Dim result As Integer = Integer.MinValue
For Each row As DataRow In dt.Rows
result = row(fld)
list.Add(result)
Next

' カラム作成
For Each item In list
Dim field As BoundField = New BoundField()
field.HeaderText = item.ToString()
GridView1.Columns.Add(field)
Next

' 表示されるか確認用
GridView1.DataSource = dt
GridView1.DataBind()
    • good
    • 0

☆まず確認(間違いないと思うけど・・・)


・ASP.NET+VBですよね?
・Frameworkのバージョンも出来れば提示してほしい。(ジェネリックリスト使ってるから2.0以上だろうけど・・・)

☆エラーの内容
GridView1.Columns.Addの第1引数は、DataControlFieldです。
#実際にはDataControlFieldクラスはMustInheritですので以下のDataControlFieldを継承したクラスを使用します。
#BoundField、ButtonField、CheckBoxField、CommandField、HyperLinkField、ImageField、TemplateField

☆回答
・カラムを追加しているように見受けられます。
・ASP.NETではGridViewをコード上でカラム追加や行追加はあまりおすすめ出来ません。DataSetやDataTableをDataSourceにバインドする方向で検討されてはいかがでしょうか?

一応追加するのに参考のURLを↓に書いておきます。

参考URL:http://social.msdn.microsoft.com/Forums/ja-JP/vw …

この回答への補足

ご助言ありがとうございます。
開発環境:VisualWebDeveloper2008ExpressEdition、vb, Framework3.5
通常はDataSetを使用するのですが、今回はDataSetなどは使用せずコード上でGridViewにデータを追加しなければいけないため、表示させる方法がまったくわかりません。。

【追加コード】
Dim NewField As New BoundField

For Each item In list
listに格納されたinteger型の値(item)をNewFieldに代入するロジック
GridView1.Columns.Add(NewField)
Next

という形のロジックになるんでしょうか?listに格納されたinteger型の値(item)をNewFieldに代入するロジックはどう書けばいいのでしょうか?見当はずれだったらすみません。。

補足日時:2009/11/25 11:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!