DataGrid AutoGenerateColumns="True" - 如何添加一个额外的列?

6
3个回答

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

4
正如Christopher所提到的,这将在表格开头添加由XAML指定的列。如果不想使用C#来定义这些列,可以在AutoGeneratedColumns事件处理程序中改变它们的DisplayIndex属性来移动这些列:table.Columns[0].DisplayIndex = table.Columns.Count - 1 - Ben Hughes

3
你可以使用<DataGrid.Columns>在XAML中添加,也可以在代码中添加。
请注意,如果你在XAML中添加,它默认会将列放在生成之前,即在列的开头。
或者,你可以在代码中添加,并特别使用事件AutoGeneratedColumns和其中的代码,它将显示为最后一列。

0
你有一个用作数据源的数据集吗?
如果有的话,更简单的方法是在 Visual Studio 的 GUI 中添加列,设置名称和数据属性名称为你能识别的内容,然后将该列添加到数据集中。
//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");

现在数据集中已经有了该列,因此如果您遍历 datarows,您也可以在那里访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接