【问题标题】:Array as DataSource of a DataGrid: how to customize columns?数组作为 DataGrid 的 DataSource:如何自定义列?
【发布时间】:2011-03-02 23:59:40
【问题描述】:

在我的 Windows Mobile .NET 应用程序中,我有一个简单的对象数组,其中包含要在 DataGrid 中显示的数据。为此,我只需调用:

myDataGrid.DataSource = myArray;

这可行,但我有一个问题:它使用所有属性作为列,并使用属性的名称作为列标题。我不知道如何自定义两件事:

  • 选择应将哪些属性子集显示为列(假设我有一个 ID、名称和值属性,我只想显示名称和值);

  • 重命名列标题以使其更有意义(例如,如果属性名为 ID,则显示列标题为“数字”)。

这可能吗?

如前所述,这是在 Windows Mobile .NET(第 2 版)应用程序中。

【问题讨论】:

    标签: c# .net windows-mobile datagrid compact-framework


    【解决方案1】:

    您需要设置 Datagrid.TableStyles 属性来自定义布局。

    http://msdn.microsoft.com/en-us/library/system.windows.forms.datagrid.tablestyles.aspx

    在此处绑定到对象数组的更多详细信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridtablestyle.mappingname(VS.71).aspx

    绑定 System.Windows.Forms.DataGrid 到一个 强类型对象数组, 对象必须包含公共属性。 创建一个 DataGridTableStyle 显示这样一个数组,设置 MappingName 属性到类名[] 其中类名被替换为 班级名称。另请注意, MappingName 属性是 区分大小写。

    【讨论】:

    • 我之前已经找到了这些,但我不太清楚它们如何将数组用作数据源。我能找到的唯一信息是将它与 DataTable 一起使用。
    • 啊,这行得通。一个很好的例子在这里:msdn.microsoft.com/en-us/library/…
    • 感谢您的解决方案! :) 一点补充:显然我也可以在设计时编辑表格样式,方法是单击 DataGrid 的 TableStyles 属性上的 [...] 按钮。我需要在 MappingName 属性中填写正确的类型(例如“Person[]”)。然后我可以编辑 GridColumnStyles 属性中的列(再次使用 [...] 按钮),在其 MappingName 属性中输入属性名称(例如“姓氏”),并在 HeaderText 属性中输入显示名称。基本上与代码相同,但设计时更容易一些。 :)
    【解决方案2】:

    不知道大家有没有提前知道列名?但如果是这种情况,您可以进入 DataGridView 的“编辑列”并在那里创建列。在“数据”类别中,将“DataPropertyName”从“(none)”更改为类属性的名称。从那里您可以自定义名称、是否可见、大小等。DataGrid 会将其绑定到您的 DataSource。

    此外,您可以将属性“DataGridView.AutoGenerateColumns”设置为 false,这样您就不必绑定对象的所有属性。我认为这也可能有帮助。

    【讨论】:

    • 不幸的是,这不是关于 DataGridView 而是关于 DataGrid(前身),我无法像在“普通”(Windows)窗体上使用 DataGridView 那样在设计时编辑列。
    • 因此,您必须通过 tablestyles 手动完成:msdn.microsoft.com/en-us/library/… 但我想您可以从 DataGrid 继承并制作自己的属性来映射到 tableStyles,以便您可以使用设计器。但是,如果您打算为一张桌子这样做,那可能不值得。
    【解决方案3】:

    在此代码中,_im 是一个表对象,我在绑定后将此对象与 DataGridView dgvItem 绑定我根据需要更改 dgvItem 的标题文本。

        dgvItem.Rows.Clear();
        dgvItem.DataSource = _im ;
        dgvItem.Columns[2].HeaderText = "Mobile Code";
        dgvItem.Columns[3].HeaderText = "Mobile Name";
    

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2014-01-06
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多