【问题标题】:How to manually populate control data binding datagridview in vb.net?如何在 vb.net 中手动填充控件数据绑定 datagridview?
【发布时间】:2013-06-18 14:47:55
【问题描述】:

我是 vb.net 的新手。我习惯于用老派的方式做事(VB6)。

有没有办法手动填充数据网格视图?在旧方式(VB6)中,我通过手动添加列来填充列表视图并循环到记录集以添加行。

例如,如果我有这个命令 (storedproc) 会怎样。

"Select OrderID, ProductName, Qty, SellingPrice, CustomerName FROM tblOrders".

如果我只需要显示OrderID, ProductName and SellingPrice? 会怎样

有没有办法手动将列 OrderID、ProductName、SellingPrice 添加到 datagridview 并循环到结果集以添加行?

提前致谢。

【问题讨论】:

    标签: vb.net datagridview manual


    【解决方案1】:

    将列添加到数据表

    Dim MyTable as New DataTable
    Dim dc As DataColumn
    
    dc = New DataColumn
    dc.DataType = System.Type.GetType("System.String")
    dc.ColumnName = "OrderID"
    MyTable.Columns.Add(dc)
    
    dc = New DataColumn
    dc.DataType = System.Type.GetType("System.String")
    dc.ColumnName = "ProductName"
    MyTable.Columns.Add(dc)
    
    dc = New DataColumn
    dc.DataType = System.Type.GetType("System.String")
    dc.ColumnName = "SellingPrice"
    MyTable.Columns.Add(dc)
    

    所以,您可以将 MyTable 设置为数据源

    DataGridview1.DataSource = MyTable
    

    添加行 ..http://msdn.microsoft.com/en-us/library/5ycd1034(v=vs.80).aspx

    【讨论】:

    • @user2059064 .. 已添加
    • 我的数据来自存储过程。我没有使用直接表访问。我需要的是如何以编程方式填充数据网格视图(手动添加列和行)。
    • 您可以将列和行添加到您从存储过程中填充的 DataTable 实例中,就像@matzone 在他的答案中显示的那样。
    • 我现在明白您为什么建议使用 Datatable。我是.net 的新手,我没有想到可以在内存中创建一个表。我现在可以看到它的用处。填充数据表。将datagridview的数据源设置为Datatable。理论上我有点理解数据表的概念。我可以编辑内存中的数据,当我准备好时,我可以使用数据表更新数据库。我说的对吗?我会对此进行更多研究。感谢您的帮助。
    【解决方案2】:

    我有一个奇怪的解决方案。如果您的查询永远不会改变(即第一列永远是“OrderID”,第二列是“ProductName”等),您可以隐藏不需要的列。

    DataGridView1.Columns(2).Visible = False       'hiding 3rd column
    DataGridView1.Columns(4).Visible = False       'hiding 5th column
    

    【讨论】:

    • 只是作为一个提示:这可能适用于上述 OP 的问题,但对于 binding complex objects 将失败。
    【解决方案3】:

    我从一本书中得到了这个代码。这段代码足够接近。至少我可以配置列的格式和对齐方式。

        Imports System.Data
        Imports System.Data.SqlClient
        Imports System.Configuration
    
        Public Class Form1
    
            Dim objConnection As New  SqlConnection(ConfigurationManager.ConnectionStrings("MyDatabase").ConnectionString)
            Dim objDataAdapter As New SqlDataAdapter()
            Dim objDataSet As New DataSet()
    
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            objDataAdapter.SelectCommand = New SqlCommand()
            objDataAdapter.SelectCommand.Connection = objConnection
            objDataAdapter.SelectCommand.CommandText = "SELECT authors.au_lname, authors.au_fname, titles.title, titles.price FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN titles ON titleauthor.title_id = titles.title_id ORDER BY authors.au_lname, authors.au_fname"
            objDataAdapter.SelectCommand.CommandType = CommandType.Text
    
            objConnection.Open()
            objDataAdapter.Fill(objDataSet, "authors")
            objConnection.Close()
    
            grdAuthorsTitles.AutoGenerateColumns = True
            grdAuthorsTitles.DataSource = objDataSet
            grdAuthorsTitles.DataMember = "authors"
    
            Dim objAlignRightCellStyle As New DataGridViewCellStyle
            objAlignRightCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
            Dim objAlernatingCellStyle As New DataGridViewCellStyle()
            objAlernatingCellStyle.BackColor = Color.WhiteSmoke
            grdAuthorsTitles.AlternatingRowsDefaultCellStyle = objAlernatingCellStyle
    
            Dim objCurrencyCellStyle As New DataGridViewCellStyle()
            objCurrencyCellStyle.Format = "c"
            objCurrencyCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
            grdAuthorsTitles.Columns(0).HeaderText = "Last Name"
            grdAuthorsTitles.Columns(1).HeaderText = "First Name"
            grdAuthorsTitles.Columns(2).HeaderText = "Book Title"
            grdAuthorsTitles.Columns(2).Width = 225
    
            grdAuthorsTitles.Columns("price").HeaderCell.Value = "Retail Price"
            grdAuthorsTitles.Columns("price").HeaderCell.Style = objAlignRightCellStyle
            grdAuthorsTitles.Columns("price").DefaultCellStyle = objCurrencyCellStyle
    
            objDataAdapter = Nothing
            objConnection = Nothing
            objCurrencyCellStyle = Nothing
            objAlignRightCellStyle = Nothing
            objAlernatingCellStyle = Nothing
    
        End Sub
    
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多