[英]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
绑定到它。
但我只想在视图中显示A
和C
。 最简单的方法是什么?
将您想要的列添加到设计器中的网格。 将每列的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.