我在客户 DataTable
上有以下字段: ID,标题,名称,地址,电子邮件,传真以及绑定{{1}的此代码}:
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字符串更改为:
DataGridView
答案 0 :(得分:1)
因此,如果你不想修改你的查询字符串(因为@Neolisk注意到这通常是使用Select *
的一个不好的做法,但这是另一个争论),所以你获得的列比你想要的多显示:
解决方案1 (非常理想,如果数据表中有很多列,并且您希望显示只是其中一些列)
您需要将AutoGenerateColumns属性设置为false。 默认为True,因此DataGridView将为数据表中的所有列创建一列。
然后,为要显示的每列添加DatagridiviewColumn
为避免必须为DatagriviewColumn添加celltemplate(请参阅this),您希望添加强类型列(例如DataGridViewTextBoxColumn)以显示String
值)。要将列与源绑定,请设置DataPropertyName属性,该属性需要与ColumnName
中列的DataTable
匹配。
所以代码是:
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 (非常理想,如果数据表中有很多列,并且您希望隐藏只是其中的一些,那么您希望保留{ {3}})
将AutoGenerateColumns属性设置为true(或者从那以后什么都不做 默认为True)
挂钩AutoGenerateColumns事件以隐藏自动生成的某些列:
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
答案 1 :(得分:0)
您必须明确地将列添加到网格中。
答案 2 :(得分:0)
如果gridview autogeneratecolumns属性设置为true,则将其更改为false,然后按照Raimond的建议进行操作。例如:
<asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="title" HeaderText="Title" />
</Columns>
</asp:GridView>
答案 3 :(得分: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语法匹配的字符串(有关语法here和RowFilter here的msdn定义的更多信息)
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;
}
我发现此解决方案使用户可以更轻松地更改过滤条件。