0

クラスの VB で .NET 3.5 プログラミングを行っています。関連する 3 つのテーブルを含む .mdb データベースと、次のようないくつかのクエリを含むテーブル アダプターがあります。

SELECT     PropertyID, Street, Unit, City, Zip, Type, Bedrooms, Bathrooms, Area, MonthlyRent
FROM         tblProperties

次に、フォームに DataGridView があります。私がやりたいことは、クエリから返されたデータを取得して DGV に表示することです。ただし、これを行うと、選択した10列ではなく、データベース内の35列すべてが表示されます(ただし、データが含まれているのは10列だけです...したがって、基本的には空の列がたくさんあるテーブルです)。

私の現在の洗練されていない解決策は、クエリを DataTable に返し、テーブルの列を繰り返し処理して、不要なものを削除することです。これは堅牢で効率的ではなく、主キー列を削除するのが好きではありません。

私の TA は、型指定されていないデータバインディングを使用することを提案しました...これは私が取得したデータのみを表示するべきだと彼は言いましたが、私たちのどちらもまだこれを理解できていません。

ありがとう!

アップデート

.aspx/.aspx.vb ページの意味がわかりませんが、これはテーブル アダプターから取得したクエリ コードです

SELECT     tblRent.PaymentID, tblTenant.TenantName, tblProperties.Street, tblProperties.Unit, tblProperties.City, tblRent.AmountPaid, tblRent.PaymentDate, 
                      tblTenant.Telephone
FROM         ((tblProperties INNER JOIN
                      tblRent ON tblProperties.PropertyID = tblRent.PropertyID) INNER JOIN
                      tblTenant ON tblProperties.PropertyID = tblTenant.PropertyID)

コードで使用する場所は次のとおりです。

Public Sub getRent()
        propView.DataSource = TblPropertiesTableAdapter.GetAllRentReceipts()
        propView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
        propView.ReadOnly = True
    End Sub

propView は、ロード時に選択された DataSource を持たない DataGridView です

4

2 に答える 2

1

タグを使用してページを作成する場合は、ページに次のコードが必要です...

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
</asp:GridView>

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:MY_ConnectionString %>" 
            SelectCommand="SELECT     tblRent.PaymentID, tblTenant.TenantName, tblProperties.Street, tblProperties.Unit, tblProperties.City, tblRent.AmountPaid, tblRent.PaymentDate,                       tblTenant.TelephoneFROM         ((tblProperties INNER JOIN                      tblRent ON tblProperties.PropertyID = tblRent.PropertyID) INNER JOIN                      tblTenant ON tblProperties.PropertyID = tblTenant.PropertyID)"></asp:SqlDataSource>

あるいは、データ層にコードを使用したい場合は、次の行に沿って何かを使用できます...

    Public Class DataLayer
    Public Function GetData(ByVal query As String, ByVal params As System.Data.Common.DbParameter()) As System.Data.DataTable
        Dim dt As New System.Data.DataTable
        Dim constr As String = System.Configuration.ConfigurationManager.ConnectionStrings("constr").ConnectionString()
        Using cnObject As New System.Data.SqlClient.SqlConnection(constr)
            Using cmd As New System.Data.SqlClient.SqlCommand(query, cnObject)
                If Not params Is Nothing Then
                    For Each param In params
                        cmd.Parameters.Add(param)
                    Next
                End If
                Using da As New System.Data.SqlClient.SqlDataAdapter(cmd)
                    da.Fill(dt)
                    Return dt
                End Using
            End Using
        End Using
    End Function
End Class

OLEDB接続を使用している場合、この関数は次のように変更できます(つまり、アプリケーションで使用するたびに更新するために1つの関数を変更するだけで済みます-いいですね)

  Public Function GetDataOLE(ByVal query As String, ByVal params As System.Data.Common.DbParameter()) As System.Data.DataTable
        Dim dt As New System.Data.DataTable
        Dim constr As String = System.Configuration.ConfigurationManager.ConnectionStrings("constr").ConnectionString()
        Using cnObject As New System.Data.OleDb.OleDbConnection(constr)
            Using cmd As New System.Data.OleDb.OleDbCommand(query, cnObject)
                If Not params Is Nothing Then
                    For Each param In params
                        cmd.Parameters.Add(param)
                    Next
                End If
                Using da As New System.Data.OleDb.OleDbDataAdapter(cmd)
                    da.Fill(dt)
                    Return dt
                End Using
            End Using
        End Using
    End Function

この機能は、任意の SQL コマンドを受け取り、データを DataTable に出力する汎用データ レイヤーであり、グリッド ビューなどにバインドするだけです。「クエリ」が必要な列のみを選択していることを確認できますが、コードをデバッグし、データベースへの SQL コマンドをチェックしています。

これをクラスに組み込み、どのページからでもアクセスしてデータをデータ テーブルにロードできるようにします。

あなたのコードは次のようになります

Public Sub getRent()
    Dim dataLayer As New DataLayer()
    Dim sqlText As String = "<insert your query text here>"
    propView.DataSource = dataLayer.getData(sqlText, Nothing)
    propView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
    propView.ReadOnly = True
End Sub
于 2008-11-03T11:59:27.417 に答える
1

DataGridViewWindowsフォームを使用していて、AutoGenerateColumnsオンになっていると仮定しています。

独自の列を追加すると、選択した列のみが表示されます。

propView.AutoGenerateColumns = false

For Each //of the columns that you want

    dim column as DataGridViewColumn = New DataGridViewColumn()
        column.DataPropertyName = "DB field name"
        column.HeaderText = "column title"

    propView.Columns.Add( column )
Next
于 2008-11-03T11:01:55.537 に答える