- PR -

System.Web.HttpException: IListSourceに・・・

1
投稿者投稿内容
webneko
会議室デビュー日: 2003/10/14
投稿数: 4
投稿日時: 2003-10-14 11:45
はじめまして。
Googleで検索しても全言語で数件しかひっかかってくれず
どなたかご存知の方があればと思い、参入しました。

当方、
VB.NET + SQL Server2000にてASP.NETの開発をしています。

現在起こっているエラーは
「System.Web.HttpException: IListSource に、データソースがありません」
(The IListSource does not contain any data sources)
というものです。

内容は、
作成したDataTableの中に、DataReaderを使用してデータをいれ
それをViewにして返し、DataGridのDataSourceに指定して
DataBind()しています。

わざわざviewにしているのはそのままDataTableを入れると
以前うまくいかなかったからですが、
代わりにそのまま作成したDataTableを入れてもうまくいきません。

1、Bindの直前にこのDataTableにレコードが存在することは確認済み
2、以前同様のやり方でうまくいっていたソースを参考にした

HTMLソースでは
<asp:DataGrid id="GRD_RESULT" runat="server" ShowHeader="False"></asp:DataGrid>
コード上では(m_tblを、DataViewとする)
 Me.GRD_RESULT.DataSource = m_tbl
 Me.GRD_RESULT.DataBind()   ←(エラーはここで発生)
としています。

どなたか、このエラーについて少しでもご存知の方があれば
ご教授ください。

ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-10-15 00:41
DataReader使わずに最初からDataSet使ってやってみてはどうでしょう。
ソースの提示が無いので分かりませんが、どこかでミスってるような気がします。
webneko
会議室デビュー日: 2003/10/14
投稿数: 4
投稿日時: 2003-10-15 09:27
>びでさん。

ご返答ありがとうございます。
DataSetを使ってみたらというアドバイスですが
私がDataSetを使っているのは
SQLで返したレコードを、.NET側でさらに計算をして
DataTableに組み込んでいるからです。
(更にいうと、ヘッダが二次元になっているので
 それも一緒に入れてしまってますが)

私もどこかでミスっているような気がするんですが
このエラーがなんのことやら分からないので
原因がつかめないでいます。
DataTableにちゃんとレコードが入っていて
Bindしたグリッド(GRD_RESULT)をウォッチ式にかけてみても
ちゃんとDataTableが入って、カウントも取れているようなのですが。

DataTable作成の内容は、長いですが以下のように。
DataReaderを使用せずにこれを実行する方法を
私は思いつかなかったのです。
このあとで前出のように
DataSeourceに指定して、Bindしています

-----------------------------------------------

Private Sub Sub_intoDataTable(ByRef intErr As Integer)
    Dim strSql As String
    Dim dReader As System.Data.SqlClient.SqlDataReader
    Dim intRecordCnt As Integer
    Dim row As DataRow
    Dim col As DataColumn
    Dim intCntRow As Integer
    Dim strBU As String = ""
    Dim decSum As Decimal = 0
    Dim decJ_V As Decimal = 0
    Dim dblRateV As Double = 0
    Dim decJ_A As Decimal = 0
    Dim dblRateA As Double = 0
    Dim decJ_L As Decimal = 0
    Dim dblRateL As Double = 0
    Dim decJ_U As Decimal = 0
    Dim dblRateU As Double = 0
    Dim decJ_Pnt As Decimal = 0
    Dim decM_Pnt As Decimal = 0

    'エラーなし
    intErr = m_NoErr

    Try
    '内部関数によるコネクションオブジェクト作成。
     DB.ConnectionString = "SqlConn1"
     DB.Open()

     strSql = "(ここでストアド)"

     DB.SqlText = strSql
     '内部関数で、ここでデータをExecuteしてます
     dReader = DB.ExecuteQuery()   

     'EOFをエラーで返す
     If Not dReader.HasRows Then
       intErr = m_Err_EOF    'エラー番号を返す
     End If

     intCntRow = 0
     While dReader.Read()
        '新規レコード追加
        row = m_tbl.NewRow()

        Select Case intCntRow
        'ヘッダー部分の作成
          Case 0
            row("BU") = "単位:台数,%"
            row("品種") = ""
            row("合計") = ""
            row("V") = "V"
            row("V2") = ""
            row("V3") = ""
            row("A") = "A"
            row("A2") = ""
            row("A3") = ""
            row("L") = "L"
            row("L2") = ""
            row("L3") = ""
            row("U") = "U"
            row("U2") = ""
            row("U3") = ""
            row("ポイント") = "ポイント"
            row("ポイント2") = ""
          Case 1
            row("BU") = ""
            row("品種") = ""
            row("合計") = "合計"
            row("V") = "実績"
            row("V2") = "構成比"
            row("V3") = "対期首差"
            row("A") = "実績"
            row("A2") = "構成比"
            row("A3") = "対期首差"
            row("L") = "実績"
            row("L2") = "構成比"
            row("L3") = "対期首差"
            row("U") = "実績"
            row("U2") = "構成比"
            row("U3") = "対期首差"
            row("ポイント") = "実績"
            row("ポイント2") = "対期首差"
          Case Else
            '一行目でなく、前項のBU名に等しくないとき
            'そのまま値を入れる
            If strBU <> dReader.GetValue(m_intColBU) And intCntRow <> 2 Then
              Select Case decSum
                Case 0
                  row("BU") = dReader.GetValue(m_intColBU)
                  row("品種") = ""
                  row("合計") = decSum
                  row("V") = ""
                  row("V2") = 0
                  row("V3") = ""
                  row("A") = ""
                  row("A2") = 0
                  row("A3") = ""
                  row("L") = ""
                  row("L2") = 0
                  row("L3") = ""
                  row("U") = ""
                  row("U2") = 0
                  row("U3") = ""
                  row("ポイント") = decJ_Pnt
                  row("ポイント2") = decM_Pnt
                Case Else
                  row("BU") = dReader.GetValue(m_intColBU)
                  row("品種") = ""
                  row("合計") = decSum
                  row("V") = ""
                  row("V2") = 100 * decJ_V / decSum
                  row("V3") = ""
                  row("A") = ""
                  row("A2") = 100 * decJ_A / decSum
                  row("A3") = ""
                  row("L") = ""
                  row("L2") = 100 * decJ_L / decSum
                  row("L3") = ""
                  row("U") = ""
                  row("U2") = 100 * decJ_U / decSum
                  row("U3") = ""
                  row("ポイント") = decJ_Pnt
                  row("ポイント2") = decM_Pnt
              End Select

              strBU = dReader.GetValue(m_intColBU)
              'データを初期化する
              decSum = 0
              decJ_V = 0
              dblRateV = 0
              decJ_A = 0
              dblRateA = 0
              decJ_L = 0
              dblRateL = 0
              decJ_U = 0
              dblRateU = 0
              decJ_Pnt = 0
              decM_Pnt = 0

            Else
              'm_intCol****はカラム番号をConstで設定
              row("BU") = ""
              row("品種") = dReader.GetValue(m_intColSummary)
              row("合計") = dReader.GetValue(m_intColSum)
              row("V") = dReader.GetValue(m_intColJ_V)
              row("V2") = dReader.GetValue(m_intColRateV)
              row("V3") = dReader.GetValue(m_intColM_V)
              row("A") = dReader.GetValue(m_intColJ_A)
              row("A2") = dReader.GetValue(m_intColRateA)
              row("A3") = dReader.GetValue(m_intColM_A)
              row("L") = dReader.GetValue(m_intColJ_L)
              row("L2") = dReader.GetValue(m_intColRateL)
              row("L3") = dReader.GetValue(m_intColM_L)
              row("U") = dReader.GetValue(m_intColJ_U)
              row("U2") = dReader.GetValue(m_intColRateU)
              row("U3") = dReader.GetValue(m_intColM_U)
              row("ポイント") = dReader.GetValue(m_intColJ_Pnt)
              row("ポイント2") = dReader.GetValue(m_intColM_Pnt)

              strBU = dReader.GetValue(m_intColBU)
              decSum += dReader.GetValue(m_intColSum)
              decJ_V += dReader.GetValue(m_intColJ_V)
              dblRateV += dReader.GetValue(m_intColRateV)
              decJ_A += dReader.GetValue(m_intColJ_A)
              dblRateA += dReader.GetValue(m_intColRateA)
              decJ_L += dReader.GetValue(m_intColJ_L)
              dblRateL += dReader.GetValue(m_intColRateL)
              decJ_U += dReader.GetValue(m_intColJ_U)
              dblRateU += dReader.GetValue(m_intColRateU)
              decJ_Pnt += dReader.GetValue(m_intColJ_Pnt)
              decM_Pnt += dReader.GetValue(m_intColM_Pnt)
            End If

        End Select

        m_tbl.Rows.Add(row)

        '次へカウント
        intCntRow += 1
     End While

     row = m_tbl.NewRow

     '最終行のBU合計をうめる。
     Select Case decSum
        Case 0
           row("BU") = strBU
           row("品種") = ""
           row("合計") = decSum
           row("V") = ""
           row("V2") = 0
           row("V3") = ""
           row("A") = ""
           row("A2") = 0
           row("A3") = ""
           row("L") = ""
           row("L2") = 0
           row("L3") = ""
           row("U") = ""
           row("U2") = 0
           row("U3") = ""
           row("ポイント") = decJ_Pnt
           row("ポイント2") = decM_Pnt
        Case Else
           row("BU") = strBU
           row("品種") = ""
           row("合計") = decSum
           row("V") = ""
           row("V2") = 100 * decJ_V / decSum
           row("V3") = ""
           row("A") = ""
           row("A2") = 100 * decJ_A / decSum
           row("A3") = ""
           row("L") = ""
           row("L2") = 100 * decJ_L / decSum
           row("L3") = ""
           row("U") = ""
           row("U2") = 100 * decJ_U / decSum
           row("U3") = ""
           row("ポイント") = decJ_Pnt
           row("ポイント2") = decM_Pnt
     End Select

     m_tbl.Rows.Add(row)

    Catch ex As Exception
      'エラー処理
    Finally
      DB.Close()

    End Try

End Sub

[ メッセージ編集済み 編集者: webneko 編集日時 2003-10-15 09:56 ]
webneko
会議室デビュー日: 2003/10/14
投稿数: 4
投稿日時: 2003-10-15 10:45
すみません。
自己レスです。

いまいち理由が分からないのですが
エラーが出た状態で回避しようとして
宣言の部分をNewにしたりやめたりしていたら
出ました。
結局ソースは前と変わってないんですけど
なんだったんでしょうか、このエラー・・・
(意味不明)

お騒がせいたしました。
1

スキルアップ/キャリアアップ(JOB@IT)