WPF数据网格列的默认值

时间:2012-01-13 07:01:47

标签: c# wpf datagrid

我的WPF应用程序中有一个DataGrid。我想知道是否有办法在数据网格中显示列的默认值。例如,我让用户可以向DataGrid添加新行。因此,在DataGrid的底部,始终有一个空行空行供用户添加数据。我希望在这一行中有一个列的默认值。有没有办法实现这个功能?谢谢!

3 个答案:

答案 0 :(得分:2)

假设ItemsSource的{​​{1}}是DataGrid的集合,您在DataGrid列中显示SomeClass PropertiesSomeClass。您可以做的是在默认SomeClass的构造函数中为Properties分配一些默认值。通过这种方式,您可以在DataGrid中拥有默认列值。

修改

正如你所说的itemssource列是一个字符串,有一种我能想到的方式..

SomeClass的集合设为只有string属性的集合。在SomeClass的默认构造函数中,为此字符串指定一个默认值。该默认值将显示在数据网格列

答案 1 :(得分:0)

实际上,您可以在ValueConverters的帮助下完成此操作。当CanUserAddRows = True时,行的DataContext绑定到ItemsSource的元素或绑定到{DataGrid.NewItemPlaceholder}以获取空行。

    <DataGrid ItemsSource="{Binding Path=Collection}" CanUserAddRows=True >
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Converter={StaticResource ShowSuitablePart}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

这是ShowSuitablePart转换器的代码。

public class ShowSuitablePart : IValueConverter
    {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value.ToString() == "{DataGrid.NewItemPlaceholder}")
            return "This is blank row, just click me to create a new one";
        else
            ((YourCollectionObject)value).SomeProperty;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception();
    }
}

如果您需要TwoWay绑定,则必须在DataTemplate中使用2个元素。一个用于空白行,第二个用于具有双向绑定的常规行。设置“可见性”绑定以隐藏常规行的第一个元素和空白行的第二个元素。

请记住,如果确定集合对象的某些属性的路径,则不会在空行行的情况下引发ValueConverter。

答案 2 :(得分:0)

在 DataGrind 上创建一个 CheckBox 列并将其绑定到“myBoolColumn”

<DataGridCheckBoxColumn Header="Selected" Binding="{Binding myBoolColumn}" />

DataTable data = new DataTable();
data.Columns.Add("myBoolColumn", typeof(System.Boolean));
data.Columns["myBoolColumn"].DefaultValue = false;