[英]How to select visible columns in Datagridview bound to DataTable
我在Customer DataTable
上有以下字段: ID,標題,名稱,地址,電子郵件,傳真以及綁定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
標題,名稱,地址數據:
"SELECT title,Name,Addrs FROM Customer"
因此,如果您不想修改查詢字符串(因為@Neolisk注意到這通常是使用Select *
一個不好的做法,但這是另一個爭論),因此您獲得的列數多於您想要顯示的列數:
Solution1 (理想情況下,如果數據表中有很多列,並且您只想顯示其中的一些列)
您需要將AutoGenerateColumns屬性設置為false。 默認為True,因此DataGridView將為數據表中的所有列創建一列。
然后,為要顯示的每個列添加DatagridiviewColumn
。
為了避免必須為DatagriviewColumn添加一個celltemplate (請參閱此內容 ),您更願意添加一個強類型列(例如DataGridViewTextBoxColumn以顯示String
值)。 要將列與源綁定,請設置DataPropertyName屬性,該屬性需要與DataTable
列的ColumnName
匹配。
所以代碼是:
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的優勢)
將AutoGenerateColumns屬性設置為true(或默認為True時不執行任何操作)
鈎住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
您必須明確地將列添加到網格中。
如果gridview autogeneratecolumns屬性設置為true,則將其更改為false,然后按照Raimond的建議進行操作。 例:
<asp:GridView ID="gvSearchResults" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="title" HeaderText="Title" />
</Columns>
</asp:GridView>
我知道這篇文章可以追溯到,但我在C#中遇到了同樣的問題,這就是我解決它的方法。
1 - 使用SQL查詢構建DataSet
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語法的字符串中的每個過濾器控件(有關此處語法的更多信息,以及此處的RowFilter的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;
}
我發現這個解決方案允許用戶更容易地更改過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.