3

我在Customer DataTable上有这些字段:ID、title、Name、Addrs、email、Fax和这个代码来绑定DataGridView

Dim sql As String = "SELECT * FROM Customers"
Dim daHeader As New SqlDataAdapter(sql, Conn)
daHeader.Fill(dsNota, "Customers")
dgvHeader.DataSource = dsNota.Tables("Customers")

如何在将 SQL 字符串更改为的情况下查看title、name、addrs数据 :DataGridView

"SELECT title,Name,Addrs FROM Customer"
4

4 回答 4

2

因此,如果您不想修改查询字符串(正如@Neolisk 注意到的那样,这通常是一种不好的做法,Select *但这是另一个争论),因此您获得的列比您想要显示的多:

解决方案1(如果数据表中有很多列并且您只想显示其中的一些列,则非常理想)

  1. 您需要将AutoGenerateColumns属性设置为 false。默认为 True,因此 DataGridView 将为数据表中的所有列创建一个列。

  2. 然后,DatagridiviewColumn为要显示的每一列添加一个。
    为避免必须为DatagriviewColumn添加单元格模板(请参阅),您希望添加一个强类型列(例如DataGridViewTextBoxColumn以显示String值)。为了将列与源绑定,您设置DataPropertyName属性,该属性需要与.ColumnNameDataTable

所以代码是:

dgvheader.AutoGenerateColumns = False
dgvHeader.Columns.Add(New DataGridViewTextBoxColumn() With {.HeaderText = "Title", .DataPropertyName = "title"}) 
dgvHeader.Columns.Add(New DataGridViewTextBoxColumn() With {.HeaderText = "Name", .DataPropertyName = "Name"}) 
dgvHeader.Columns.Add(New DataGridViewTextBoxColumn() With {.HeaderText = "Adresse", .DataPropertyName = "Addrs"}) 
dgvHeader.DataSource = dsNota.Tables("Customers")

解决方案2(如果数据表中有很多列,并且您只想隐藏其中的一些列,因此您想保留AutoGenerateColumns的好处,则非常理想)

  1. AutoGenerateColumns属性设置为 true(或不执行任何操作,因为默认值为 True)

  2. 挂钩DataGridView.DataBindingComplete事件以隐藏一些自动生成的列:

    Private Sub dataGridView1_DataBindingComplete(ByVal sender As Object, ByVal e As DataGridViewBindingCompleteEventArgs) Handles dgvHeader.DataBindingComplete   
        With dgvHeader
            .Columns("Fax").Visible = False
        End With
    End Sub
    
于 2013-05-24T23:14:49.863 回答
0

如果 gridview autogeneratecolumns 属性设置为 true,则将其更改为 false,然后按照 Raimond 的建议进行操作。例子:

<asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False">
        <Columns>
                <asp:BoundField DataField="title" HeaderText="Title" />
        </Columns>
</asp:GridView>
于 2013-05-23T13:12:55.040 回答
0

我知道这篇文章可以追溯到很久以前,但我在 C# 中遇到了同样的问题,这就是我解决它的方法,效果非常好。

1 - 使用您的 SQL 查询构建数据集

     private void LoadDS()
     {
         // this method gets data from my database
         // DS is a DataSet in the properties of my form
         DS = LoadData();
     }

2 - 以您想要的方式过滤 DataView

为此,我使用 DataView 的RowFilter属性。我创建了一个 GetFiltersToString() 方法,该方法将我拥有的每个过滤器控件格式化为与 RowFilter 语法匹配的字符串(有关语法的更多信息,以及此处的 RowFiltermsdn 定义)

    public void RefreshDGV()
    { 
        // Get the corresponding dataview
        DV = new DataView(DS.Tables[0], rowFilter, "SORTINGCOLUMN Desc", DataViewRowState.CurrentRows);
        // Display it in a datagridview
        DGV.DataSource = DV;
    }

我发现此解决方案允许用户更轻松地更改过滤。

于 2018-06-29T14:02:54.603 回答
-1

您必须将列显式添加到网格中。

于 2013-05-22T09:52:51.717 回答