我的WPF应用程序中有一个DataGrid。我想知道是否有办法在数据网格中显示列的默认值。例如,我让用户可以向DataGrid添加新行。因此,在DataGrid的底部,始终有一个空行空行供用户添加数据。我希望在这一行中有一个列的默认值。有没有办法实现这个功能?谢谢!
答案 0 :(得分:2)
假设ItemsSource
的{{1}}是DataGrid
的集合,您在DataGrid列中显示SomeClass
Properties
个SomeClass
。您可以做的是在默认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;