Sql 查看选定列

Sql 查看选定列,sql,vb.net,datagridview,dataview,Sql,Vb.net,Datagridview,Dataview,我正在用VB为一堂课做.NET3.5编程。我有一个包含3个相关表的.mdb数据库,还有一个表适配器,其中包含一些查询,如下所示: SELECT PropertyID, Street, Unit, City, Zip, Type, Bedrooms, Bathrooms, Area, MonthlyRent FROM tblProperties 然后在表单中我有一个DataGridView。我要做的是获取查询返回的数据,并将其显示在DGV中。然而,当我这样做时,它会显示数

我正在用VB为一堂课做.NET3.5编程。我有一个包含3个相关表的.mdb数据库,还有一个表适配器,其中包含一些查询,如下所示:

SELECT     PropertyID, Street, Unit, City, Zip, Type, Bedrooms, Bathrooms, Area, MonthlyRent
FROM         tblProperties
然后在表单中我有一个DataGridView。我要做的是获取查询返回的数据,并将其显示在DGV中。然而,当我这样做时,它会显示数据库中的所有35列,而不是我选择的10列(这10列是唯一包含数据的列…因此它基本上是一个包含大量空白列的表)

我目前的不雅观的解决方案是将查询返回到DataTable,然后遍历表中的列,删除我不想要的列。这不是健壮的、高效的,并且不像我那样删除主键列

我的助教建议尝试使用非类型的数据绑定。。。他说,这应该只显示我提取的数据,但我们都还没有弄清楚这一点

谢谢大家!

更新

我不确定您所说的.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是一个DataGridView,在加载时没有选择数据源。我假设您使用的是Windows窗体和启用了
AutoGenerateColumns
DataGridView

如果添加您自己的列,则仅显示您选择的列:

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

如果您使用标记构建页面,则需要在页面中包含以下代码

<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>
如果您使用的是OLEDB连接,则可以按如下方式更改此函数(这意味着您只需更改一个函数即可更新应用程序中对它的每次使用-nice)

此函数是一个通用数据层,它将接收任何SQL命令并输出DataTable中的数据,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
公共子租金()
将数据层设置为新数据层()
Dim sqlText As String=“”
propView.DataSource=dataLayer.getData(sqlText,Nothing)
propView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
propView.ReadOnly=True
端接头

您应该处理SqlCommand和SqlConnection实例。True-我试图从更复杂的数据类粘贴代码。最简单、最清晰的方法是使用using语句。我会更新代码。我喜欢这个解决方案,因为它提供了一种生成视图的健壮方法,但是我在让它工作时遇到了麻烦。VS说:“配置不是System.Web的成员”我的数据库是项目目录中的access.mdb文件,但我在将其解析为连接字符串时遇到问题。向AvatarSquadron道歉。请尝试System.Configuration.ConfigurationSettings.ConnectionString[“myConnectionString”].ConnectionString。另外,如果是access数据库,您可能需要实现OLE DB连接?您是在使用web应用程序还是桌面应用程序?
  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
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