DataGrid AutoGenerateColumns =“True” - 如何附加一个额外的列?

时间:2011-11-22 20:04:44

标签: c# wpf datagrid

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

如何添加添加列?

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

3 个答案:

答案 0 :(得分:8)

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

修改

抱歉,我假设了WinForms。同样的想法,只需将列直接添加到XAML:

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

这是ViewModel:

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; }
}

这就是它所显示的内容:

enter image description here

答案 1 :(得分:3)

您可以使用<DataGrid.Columns>在XAML中添加它,也可以在代码中添加。

请记住,如果你在XAML中这样做,默认情况下它会将列放在列的开头,即在它们生成之前。

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

答案 2 :(得分:0)

您是否有用作数据源的数据集?

如果是这样,更简单的方法是在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");

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