绑定到BindingList <T> - 选择要绑定的内容?

sar*_*ake 7 c# data-binding compact-framework bindinglist

假设我有一个名为Sample的业务对象,我有样本的BindingList.样本有4个属性.

我可以选择哪些属性绑定到DataGrid,或者没有选项来自定义这样的东西?

注意:我使用Compact Framework,其中没有DataGridView,以及Autogenerate属性和DataMember属性.

回复时请记住这一点.

Jus*_*ury 10

BindingList<Sample> samples = new BindingList<Sample>();
DataGridView dgv = new DataGridView();
dgv.DataSource = samples;
Run Code Online (Sandbox Code Playgroud)

这应该将每个公共属性显示为DataGridView上的列.如果要更改显示的属性,还需要执行以下操作:

dgv.AutoGenerateColumns = false;
Run Code Online (Sandbox Code Playgroud)

并进入datagridview的属性,手动添加列并将DataPropertyName设置为属性名称.

如果您在代码中创建了datagridview,则以下内容将创建并向dgv添加一列.

DataGridViewColumn dgvc = new DataGridViewColumn();
dgvc.Name = "PropertyA";
dgvc.HeaderText = "Property A";
dgvc.DataPropertyName = "PropertyA";
dgv.Columns.Add(dgvc);
Run Code Online (Sandbox Code Playgroud)


编辑

这应该给你一些更接近你想要的东西.但是,因为它使用匿名类,所以不能使用BindingList(我知道).或者,您可以创建一个SampleBinding类,它只包含您想要显示的属性,并从正常样本列表中生成这些属性.

public class Sample
{
    public int PropertyA {get;set;}
    public bool PropertyB {get;set;}
    public string PropertyC {get;set;}
    public double PropertyD {get;set;}
}

List<Sample> samples = new List<Samples>(GetSamples());
var sampleBinding = from sample in samples
                    select new
                    {
                        PropertyA = sample.PropertyA,
                        PropertyC = sample.PropertyC
                    };

BindingList bl = new BindingList();
bl.DataSource = sampleBinding;
dgv.DataSource = bl;
Run Code Online (Sandbox Code Playgroud)


编辑2

public class Sample
{
    [Browsable(false)]
    public int PropertyA {get;set;}
    public bool PropertyB {get;set;}
    public string PropertyC {get;set;}
    [Browsable(false)]
    public double PropertyD {get;set;}
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 0

我假设您指的是 WinForms 中的 DataGrid,但这同样适用于大多数可绑定控件。

是的,你可以这样做。执行此操作的方法分为两步

  • 将 DataSource 成员设置为BindingList<T>.
  • 将 DataMember 属性设置为要绑定的属性的字符串名称。