簡體   English   中英

如何選擇綁定到DataTable的Datagridview中的可見列

[英]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 (理想情況下,如果數據表中有很多列,並且您只想顯示其中的一些列)

  1. 您需要將AutoGenerateColumns屬性設置為false。 默認為True,因此DataGridView將為數據表中的所有列創建一列。

  2. 然后,為要顯示的每個列添加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的優勢)

  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 

您必須明確地將列添加到網格中。

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM