WPF数据表格列的默认值

4

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


你的DataGrid的ItemSource是什么? - Haris Hasan
列项的ItemsSource是一个ObservableCollection<string>。 - Eric R.
3个回答

3
假设您的DataGrid的ItemsSource是SomeClass的集合,并且在DataGrid列中显示SomeClass的不同属性。您可以在default SomeClass的构造函数中分配属性一些默认值。这样,您就可以在DataGrid中拥有默认列值。
编辑:
您说列的itemssource是一个字符串,我只能想到一种方法。
将其转换为只包含一个字符串属性的SomeClass集合。在SomeClass的默认构造函数中,将该字符串赋予默认值。该默认值将出现在您的DataGrid列中。

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个元素。一个用于空行,第二个用于具有TwoWay绑定的常规行。设置可见性绑定以隐藏常规行的第一个元素和空白行的第二个元素。
请记住,如果您确定路径到集合对象的某个属性,则在空白行情况下它不会引发ValueConverter

0
在DataGrid上创建一个CheckBox列,并将其绑定到“myBoolColumn”。
<DataGridCheckBoxColumn Header="Selected" Binding="{Binding myBoolColumn}" />

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

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