簡體   English   中英

如何將 DataGridView 綁定到特定屬性?

[英]How to bind DataGridView to specific properties?

說如果這是我的數據 class

class Data
{
    public int A { set; get;}
    public long B { set; get;}
    public string C { set; get;}
}

現在我有一個Data集合作為數據源,我希望DataGridView綁定到它。

但我只想在視圖中顯示AC 最簡單的方法是什么?

將您想要的列添加到設計器中的網格。 將每列的DataPropertyName設置為要綁定到的數據源屬性/列的名稱。 在代碼中綁定數據之前,將AutoGenerateColumns設置為false ,這樣網格就不會創建任何額外的列。

您的問題是如何將 DataGridView 綁定到特定屬性 您提到您有一個Data集合,但沒有說明它是否可觀察(例如BindingList<Data> )。 以最簡單的方法來結束您的帖子? 雖然這是一個意見問題,但我個人認為非常簡單的一種方法是允許AutoGenerateColumns並在表單的OnLoad覆蓋中對可綁定源進行列格式化。


例子

截屏

public partial class MainForm : Form
{
    public MainForm() => InitializeComponent();
    internal BindingList<Data> Rows { get; } = new BindingList<Data>();
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        dataGridView.AllowUserToAddRows = false;
        dataGridView.DataSource = Rows;
        dataGridView.CellEndEdit += (sender, e) => dataGridView.Refresh();

        #region F O R M A T    C O L U M N S
        Rows.Add(new Data()); // <= Auto-generate columns
        dataGridView.Columns["A"].Width = 50;
        dataGridView.Columns["A"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        dataGridView.Columns["A"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        dataGridView.Columns["C"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        dataGridView.Columns["C"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        Rows.Clear();
        #endregion F O R M A T    C O L U M N S

        // Add a few items
        Rows.Add(new Data { A = 1, B = 1000L });
        Rows.Add(new Data { A = 2, B = 2000L });
        Rows.Add(new Data { A = 3, B = 3000L });
    }
}

Data class 定義列是否顯示以及是否可使用可見性和屬性進行編輯。

class Data
{
    // A visible, editable cell.
    public int A { get; set; }

    // Non-visible because property is declared as internal.
    internal long B { get; set; }

    // Visible, read-only cell that dynamically responds
    // when cell 'A" is edited due to Refresh() 
    public string C => $"A={A} B={B}";

    // Non-visible because of attribute.
    [Browsable(false)]
    public string? D { get; set; } = "Not visible";        
}

另一種選擇是,如果該列首先存在,則它可以顯示隱藏。 例如: dataGridView.Columns["C"].Visible = false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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