【问题标题】:DataGrid AutoGenerateColumns="True" - how to append one extra column?DataGrid AutoGenerateColumns="True" - 如何追加一列?
【发布时间】:2011-11-22 20:04:44
【问题描述】:

我正在使用带有 AutoGenerateColumns="True" 的 DataGrid。 现在,除了自动生成的列之外,我还想添加一个“自定义”列,即所谓的“服务”列。 (在其中我想要几个超链接“开始”“停止”“重置”)。

如何添加添加栏?

我找到了这个页面http://msdn.microsoft.com/ru-ru/library/system.windows.controls.datagrid.autogeneratecolumns.aspx,它描述了如何修改或删除列,但我找不到如何添加列。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    您应该能够像往常一样在设计器中添加一列。它只会将该列附加到所有生成的列中。

    编辑

    对不起,我假设是 WinForms。同样的想法,只需将列直接添加到 XAML:

        <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Src}" x:Name="Grid">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Junk"></DataGridCheckBoxColumn>
                <DataGridHyperlinkColumn Header="Junk2"></DataGridHyperlinkColumn>
            </DataGrid.Columns>
        </DataGrid>
    

    这是视图模型:

    public class ViewModel
    {
        public ViewModel()
        {
            Src = new ObservableCollection<Item>() { new Item { Id = 1, Name = "A" }, new Item { Id = 2, Name = "B" } };
        }
    
        public ObservableCollection<Item> Src { get; set; }
    }
    
    public class Item{
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    这就是它所显示的:

    【讨论】:

    • 正如 Christopher 所提到的,这会将 XAML 指定的列添加到表的开头。要移动它们,而无需在 C# 中定义列,在 AutoGeneratedColumns 的处理程序中,您可以更改其 DisplayIndex:table.Columns[0].DisplayIndex = table.Columns.Count - 1
    【解决方案2】:

    您可以使用 &lt;DataGrid.Columns&gt; 在 XAML 中添加它,也可以在代码中添加。

    请记住,如果您在 XAML 中执行此操作,默认情况下它会将列放在列的开头,即在它们生成之前。

    或者,您可以在代码中添加它,并专门使用事件AutoGeneratedColumns 和那里的代码,它将显示为最后一列。

    【讨论】:

      【解决方案3】:

      您有用作数据源的数据集吗?

      如果是这样,更简单的方法是在 Visual Studio GUI 中添加列,将 Name 和 DataPropertyName 设置为您可以识别的内容,然后将该列添加到 DataSet,

      //Assumes you added a column that you named 'clNew'
      //Assumes you have one table in your dataset that the DGV is bound to
      clNew.Name = "clNew";
      clNew.DataPropertyName = "clNew";
      
      ds.Tables[0].Columns.Add("clNew");
      

      列现在在数据集中,因此如果您遍历数据行,您也可以在那里访问它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 2013-03-27
        • 2010-12-12
        • 2011-04-29
        • 2015-08-07
        • 1970-01-01
        相关资源
        最近更新 更多