将对象列表数据绑定到 WinForms DataGridView,但不显示某些公共属性

     2023-02-26     311

关键词:

【中文标题】将对象列表数据绑定到 WinForms DataGridView,但不显示某些公共属性【英文标题】:Databind List Of Objects To A WinForms DataGridView, But Not Show Certain Public Properties 【发布时间】:2011-01-27 01:16:36 【问题描述】:

我什至不确定我这样做是否正确。但基本上我有一个由类构建的对象列表。从那里,我将列表绑定到 Windows 窗体 (C#) 上的数据网格视图

从那里,它在数据网格视图中显示对象的所有公共属性。但是,我仍然需要从我的应用程序的其他部分访问某些属性,但实际上并不需要在 DataGridView 中可见。

那么是否有一个属性或类似的东西我可以写在属性上方以将其排除在显示之外。

附:我在运行时绑定。所以我无法通过设计器编辑列。

P.P.S.请不要只制作公共变量的答案(尽管如果这是唯一的方法,请告诉我:))。

【问题讨论】:

您可以禁用 'DataGridView.AutoGenerateColumns' (goo.gl/41qt) 并动态添加所需的列。当您说“......我在运行时绑定。所以我无法通过设计器编辑列。”时,我真的不明白。 我的意思是。我没有使用设计器并绑定到数据源。我只是在写:datagridview.datasource = mylist; 也许您可以告诉我们为什么您在运行时绑定而不是通过设计器绑定。这可能会有所帮助 【参考方案1】:

我知道它有点老帖子,但为了清楚起见,我想补充一点,这也可以通过使用ICustomTypeDescriptor 接口定义自定义类型定义来实现。看起来需要做更多的工作,但您只能实现您需要的东西(在本例中为 GetProperties)。它使以后的事情变得更容易,因为大多数列出的列自动生成网格/列表都支持这种方法。

【讨论】:

【参考方案2】:

除了我之前的回答之外,由于您更愿意指示不要手动添加列,我建议您另一种选择:在属性定义中使用自定义属性

首先,您必须对自定义属性进行编码:

MyPropertyAttribute 类

[AttributeUsage(AttributeTargets.Property)]
public class MyPropertyAttribute : Attribute

    public enum VisibilityOptions
    
        visible,
        invisible
    

    private VisibilityOptions visibility = VisibilityOptions.visible;

    public MyPropertyAttribute(VisibilityOptions visibility)
    
        this.visibility = visibility;
    

    public VisibilityOptions Visibility
        
            get
            
                return visibility;
            
            set
            
                visibility = value;
            
        

你可以在你的课程中使用它,就像这样:

Foo 类

public class Foo

    private string name;
    private string surname;

    [MyPropertyAttribute(MyPropertyAttribute.VisibilityOptions.visible)]
    public string Name
    
        get
        
            return name;
        
        set
        
            name = value;
        
    

    [MyPropertyAttribute(MyPropertyAttribute.VisibilityOptions.invisible)]
    public string Surname
    
        get
        
            return surname;
        
        set
        
            surname = value;
        
    


您可以编写一个方法,使用反射迭代绑定对象中的属性,并测试它们是否被标记为可见或不可见,以便添加或不添加列。您甚至可以拥有具有此行为的自定义 DataGridView,因此您不必每次都重复此操作。您只需使用自定义 DataGridView,并在属性中标记可见性。

这样的……

public class MyCustomDataGridView : DataGridView
    

        public MyCustomDataGridView()
        
            this.AutoGenerateColumns = false;
        

        public void Load<T>(ICollection<T> collection)
        

            foreach(object myAttribute in typeof(T).GetCustomAttributes(typeof(MyPropertyAttribute).GetType(), true))
            
                if (((MyPropertyAttribute)myAttribute).Visibility == MyPropertyAttribute.VisibilityOptions.visible)
                
                    //...
                
            

        

    

【讨论】:

【参考方案3】:

[Browsable(false)] 属性添加到您不想为其生成列的公共属性。

【讨论】:

+1 如果只是添加这个作品,这比我的回答要好得多! :-) 很好,我已经尝试过了,它有效 =) 我正在尝试添加我的自定义类。谢谢!【参考方案4】:

我的回答与@Vivek 在他的评论中所说的一样。我不知道他为什么不在这里添加答案...

好吧,如果您让 DataGridView 控件自动生成其列,它会显示绑定对象中的所有属性。所以首先,你必须转DataGridView.AutoGenerateColumns = false

然后您可以在运行时添加列。例如:

DataGridViewColumn myColumn = new DataGridViewTextBoxColumn();
myColumn.DataPropertyName.HeaderText = "Title of the column";
myColumn.DataPropertyName = "NameOfTheProperty";

//...

MyDataGridView.Columns.Add(myColumn);

【讨论】:

那么,我有个想法,但是太大了,我会放在另一个答案中。 忘记第二个想法。请参阅@Vivek 回答 =P

Winforms DataGridView 数据绑定到复杂类型/嵌套属性

】WinformsDataGridView数据绑定到复杂类型/嵌套属性【英文标题】:WinformsDataGridViewdatabindtocomplextype/nestedproperty【发布时间】:2010-10-1514:09:27【问题描述】:我正在尝试将DataGridView数据绑定到包含具有以下结构的类的列表:MyClass.SubCl... 查看详情

在 WinForms 中将 Listbox 绑定到 List<object>

】在WinForms中将Listbox绑定到List<object>【英文标题】:BindingListboxtoList<object>inWinForms【发布时间】:2011-02-1003:07:30【问题描述】:将列表框绑定到Windows窗体中的对象列表的最简单方法是什么?【问题讨论】:你的平台是什... 查看详情

如何将 Telerik 网格列绑定到作为列表的子数据对象?

】如何将Telerik网格列绑定到作为列表的子数据对象?【英文标题】:Howtobindatelerikgridcolumntoachilddataobjectthatisalist?【发布时间】:2011-03-2915:42:52【问题描述】:我有一个网格,可以使用http://www.telerik.com/help/aspnet-ajax/grdbindingtosubobje... 查看详情

无法从数据绑定 Winforms 下拉列表中跳出

】无法从数据绑定Winforms下拉列表中跳出【英文标题】:CannottaboutofdataboundWinformsdropdownlist【发布时间】:2010-09-2209:10:16【问题描述】:这有点奇怪,但我已经挣扎了几个小时了,我无法理解发生了什么。我想知道是否有其他人遇... 查看详情

绑定数据更改时Winforms列表框不更新

】绑定数据更改时Winforms列表框不更新【英文标题】:Winformslistboxnotupdatingwhenbounddatachanges【发布时间】:2010-10-2014:00:48【问题描述】:下图显示了我的代码是如何工作的。当我按下按钮2时,列表框会更新,但当我按下按钮1时不... 查看详情

将对象列表绑定到表单[重复]

】将对象列表绑定到表单[重复]【英文标题】:BindListofobjectstoaform[duplicate]【发布时间】:2018-03-1914:10:51【问题描述】:我有一类Signature对象:publicclassSignaturepublicintSignatureIDget;set;publicintFormIDget;set;publicstringTitleget;set;publicstringEmail... 查看详情

将枚举绑定到 WinForms 组合框,然后设置它

】将枚举绑定到WinForms组合框,然后设置它【英文标题】:BindinganenumtoaWinFormscombobox,andthensettingit【发布时间】:2010-10-2818:13:13【问题描述】:很多人已经回答了如何将枚举绑定到WinForms中的组合框的问题。是这样的:comboBox1.DataSo... 查看详情

Winforms 将枚举绑定到单选按钮

】Winforms将枚举绑定到单选按钮【英文标题】:WinformsBindEnumtoRadioButtons【发布时间】:2011-01-2910:17:16【问题描述】:如果我有三个单选按钮,将它们绑定到具有相同选择的枚举的最佳方法是什么?例如[]Choice1[]Choice2[]Choice3publicenum... 查看详情

WPF:将列表动态绑定到(某些)对象的属性

】WPF:将列表动态绑定到(某些)对象的属性【英文标题】:WPF:Dynamicallybindingalistto(someof)anobject\'sproperties【发布时间】:2011-03-1007:34:09【问题描述】:我有一个对象集合存储在CollectionViewSource中并绑定到DataGrid。我想显示DataGrid... 查看详情

如何将对象的列表属性绑定到组合框子菜单?

】如何将对象的列表属性绑定到组合框子菜单?【英文标题】:HowcanIbindmylistPropertyoftheobjecttocomboboxsubmenus?【发布时间】:2021-05-1104:28:48【问题描述】:我有这个包含列表属性的类类型HouseInfo的对象:publicclassHouseInfopublicstringHouseg... 查看详情

将组合框和列表框绑定到列表(VB.NET)时出现问题

...omboBox和ListBox绑定到Vb.Net(VS2013)中的List(OfString),这是针对WinForms应用程序的,问题是在ComboBox和ListBox,在其中一个上选择一个项 查看详情

java示例代码_将对象列表绑定到SpringMvc控制器

java示例代码_将对象列表绑定到SpringMvc控制器 查看详情

将列表的内容数据绑定到数据网格

】将列表的内容数据绑定到数据网格【英文标题】:Databindingthecontentsofalisttoadatagrid【发布时间】:2021-07-1204:44:31【问题描述】:我最近制作了一个由预先存在的表中的行组成的列表,并想尝试将该列表数据绑定到数据网格。然... 查看详情

如何将列表绑定到组合框?

...2010-10-1016:40:40【问题描述】:我想将BindingSource连接到类对象列表,然后将对象值连接到ComboBox。谁能建议怎么做?publicclassCountrypublicstringNameget;set;publicIList<City>Citiesget;set;publicCountr 查看详情

如何将对象列表绑定到百里香中的复选框?

】如何将对象列表绑定到百里香中的复选框?【英文标题】:Howtobindanobjectlisttocheckboxinthymeleaf?【发布时间】:2016-10-1105:17:00【问题描述】:我在将复选框输入与对象列表绑定时遇到很多困难。问题是当我在输入字段类型复选框... 查看详情

需要使用 LINQ 将 WPF 对象绑定到列表框的简单示例

】需要使用LINQ将WPF对象绑定到列表框的简单示例【英文标题】:NeedsimpleexampleofWPFbindingObjectstoListboxwithLINQ【发布时间】:2010-10-0411:11:18【问题描述】:以下示例成功地将对象与ListBox绑定以显示它们。但是,我想在一个类中创建... 查看详情

Android:如何将微调器绑定到自定义对象列表?

】Android:如何将微调器绑定到自定义对象列表?【英文标题】:Android:Howtobindspinnertocustomobjectlist?【发布时间】:2010-12-1003:52:58【问题描述】:在用户界面中必须有一个微调器,其中包含一些名称(名称是可见的)并且每个名称... 查看详情

如何使用绑定到数据表的 c#winforms 保存我的 datagridview

】如何使用绑定到数据表的c#winforms保存我的datagridview【英文标题】:Howtosavemydatagridviewwithc#winformsboundedtoadatatable【发布时间】:2021-04-1500:27:27【问题描述】:我已经使用设计器将我的MSSQL数据表绑定到datagridview(数据表至少有30... 查看详情