tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル並びが変わってしまう
記事No4410
投稿日: 2006/10/12(Thu) 18:39
投稿者WON
 いつも、お世話になっています。
VB2005+SQLserver2000+ActiveReports.NETの環境で

SQLserverからDataViewでデータを取得した後
レポートのDataSource に渡しレポートを実行します。

ただDataViewの中の発注番号の最小値と最大値を
レポートに印字する為、プロパティをレポートに
コーディングし、そこにも同じDataViewを渡します(rpt.Dv = vwの部分)

 vwはDataViewです

rpt.Dv = vw
rpt.DataSource = vw
rpt.Run()
といったレポートの実行です。

そこでレポートの方のコーディングですが
まずプロパティの部分です。
Dim mDv As New System.Data.DataView

Public Property Dv() As DataView
        Get
            Return mDv
        End Get
        Set(ByVal value As DataView)
            mDv = value
        End Set
    End Property

 そして問題の発注番号の最小値と最大値をとる部分です。

mDv.RowFilter = "DKBN = 'M' "
mDv.Sort = "HACNO "
lngMINHACNO = mDv(0)("HACNO")
mDv.Sort = "HACNO DESC"
lngMAXHACNO = mDv(0)("HACNO")
fldMAXHACNO.Text = lngMINHACNO & "〜" & lngMAXHACNO

 プロパティで受けたDataViewを
Filterかけ、並び替え発注番号の最小値と最大値をとりますが
最小値と最大値はきちんととれますが

もともとのデータソースも並び変わってしまってか
部課コード順のはずなのですが、並びがメチャクチャになって
レポートが印刷されてしまいます。

Filterかけ、並び替える部分をコメントにすると
正しく部課コード順で印刷されます。

対処方法を教えて頂けませんか?
宜しくお願いします。

[ツリー表示へ]
タイトルRe: 並びが変わってしまう
記事No4411
投稿日: 2006/10/12(Thu) 21:05
投稿者るしぇ
とりあえずこういうことでは?
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard34.htm

↓メンバに Clone メソッドが出てなかったから ToTable メソッド?
http://msdn2.microsoft.com/ja-jp/library/system.data.dataview_members.aspx
…なんか無理があるけど。。。

> Dim mDv As New System.Data.DataView
で New されたインスタンスは
> rpt.Dv = vw
で使われることなく置き換えられるの?

vw をどうやって作っているのか分からないけど、その時にもう一個
Filter 処理用の別のインスタンス vw2 を作るのが自然な流れかも?

[ツリー表示へ]
タイトルRe^2: 並びが変わってしまう
記事No4414
投稿日: 2006/10/13(Fri) 09:47
投稿者WON
るしぇさん、ありがとうございます。

参考に試してみました。

1.ByVal をByRefにしようとしましたがエラーになってしまいます。

レポートのDataViewを受け取る部分です。

Public Property Dv() As DataView
        Get
            Return mDv
        End Get
        Set(ByVal value As DataView)
            mDv = value
        End Set
End Property

2.呼び出し側のFormでvw.Cloneはでませんでした。

rpt.Dv = vw

3.DataViewの取得方法

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles Button1.Click
        Dim vw As New System.Data.DataView
        '指定した SQL コマンドを実行
        vw = gv.GetDv(fSQL(), "SQL")

     rpt.Dv = vw
        rpt.DataSource = vw
        rpt.Run()
        Viewer1.Document = rpt.Document
*****************************************************************
DataViewを取得するクラスです。

Public Class AGetDv
    'Inherits System.ComponentModel.Component

    Public Function GetDv(ByVal pSQL As String, ByVal pCmdType As String) As DataView
        
        Dim MyCn As New SqlConnection
        Dim MyCmd As New SqlCommand
        Dim MyDA As New SqlDataAdapter
        Dim MyDS As DataSet = New DataSet

        Dim strConnection As String = "Persist Security Info=True;Integrated Security=false;User ID=anq;Password=nq;Initial Catalog=AOYDB;Data Source=SV01 "

        With MyCmd
            Select Case pCmdType
                Case "SQL"
                    .CommandType = CommandType.Text
                Case "SP"
                    .CommandType = CommandType.StoredProcedure
                Case Else
                    .CommandType = CommandType.Text
            End Select
            '*********
            .CommandText = pSQL
            .Connection = MyCn
        End With
        '**************************************************************
        Try
            MyCn.ConnectionString = strConnection
            MyCn.Open()
            MyDA.SelectCommand = MyCmd
            MyDA.Fill(MyDS)
            MyCn.Close()
            Return MyDS.Tables(0).DefaultView
        Catch ex As Exception
            If (MyCn.State = ConnectionState.Open) Then
                MyCn.Close()
            End If
        End Try
        Return Nothing
    End Function

End Class

*****************************************************************

最後にFilter 処理用の別のインスタンス vw2 を作るとありましたが
どう作成するのか、ご教授頂けないでしょうか?

宜しくお願いします。

[ツリー表示へ]
タイトルRe^3: 並びが変わってしまう
記事No4415
投稿日: 2006/10/13(Fri) 11:46
投稿者るしぇ
> 1.ByVal をByRefにしようとしましたがエラーになってしまいます。
だから何?エラーを解決すれば良いだけでは?
メニューから[表示]-[その他のウィンドウ]-[タスク一覧]
を表示すれば、エラーが一覧表示されます。対象のエラー
メッセージを選択し、[F1]キー押下で解決方法が書いてある
ヘルプに飛びます。
http://msdn2.microsoft.com/ja-jp/library/9skfdee2.aspx
内容が理解できずに質問したい場合は、最低限、エラー
メッセージを書きます。また、理解できない内容を具体的に
説明します。
プロパティやめてメソッドにすれば?…問題は解決しないけどね。
理由は既にリンクしたページの内容を理解してください。

> 2.呼び出し側のFormでvw.Cloneはでませんでした。
知ってます。メンバに無いって書いたでしょ?用意されていません。
参考ページでも
>4−1.代入の相違点
>Cloneメソッドを持っていないクラスの場合は簡単にコピーを作ることはできません。
>プロパティの値を1つずつ代入していくことになりますが、そのプロパティがまた
>参照型だったりしてなかなか大変です。
書いてる内容です。

> 最後にFilter 処理用の別のインスタンス vw2 を作るとありましたが
> どう作成するのか、ご教授頂けないでしょうか?
1個作ってるんだから同じようにすればもう1個作れるのでは???
ただ、データベース検索をもう1回するのは不格好だから、DataTable
から作れば良いのでは?
DataView の使い方を普通にヘルプで確認していれば、サンプルコードも
ありませんか?ちゃんと確認してる???(普通は自分が利用するコードの
仕様くらい、一通り目を通すものですが)
http://msdn2.microsoft.com/ja-jp/library/system.data.dataview.aspx

質問しなきゃ分からないことなのかな?
自分でできることは最大限に実行してから質問してね。

[ツリー表示へ]
タイトルRe^4: 並びが変わってしまう
記事No4420
投稿日: 2006/10/13(Fri) 17:24
投稿者WON
るしぇさん、何度も丁寧にありがとうございます。

確かに同じようにすればもう1つDataView が作られて
それを渡せばOKなのですが・・

ご指摘の通り、データベース検索をもう1回検索するのは
どうかと思いますので、DataView の使い方を
もう1度見直してみます。

VB2005をはじめて間もない為、初歩的な質問ですいませんでした。

[ツリー表示へ]