带有空数据表的 DataGrid 允许用户输入 C# WPF
DataGrid with Empty DataTable to allow user input C# WPF
我有一个应用程序有多个选项卡,每个选项卡包含一个数据网格,其中包含来自我的数据库的数据。我有一个将所有数据网格写入 .csv 文件的保存按钮。我想创建一个包含空数据网格的附加选项卡,以便用户可以键入信息,以便以相同的方式输出。
有没有办法将数据网格绑定到空数据table?或者是否有更好的解决方案允许用户动态输入可变数量的信息(有时一行,有时 10 行)
C#
DataTable dt_Call_Drivers = new DataTable();
Call_Drivers_DataGrid.ItemsSource = dt_Call_Drivers.DefaultView;
XAML
<DataGrid x:Name="Call_Drivers_DataGrid" ItemsSource="{Binding}" GridLinesVisibility="Horizontal" CanUserAddRows="true" AutoGenerateColumns="False" Margin="0,0,0,0">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MetroDataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Case" Width ="90" Binding="{Binding Case}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
只需将数据网格绑定到 ObservableCollection,定义您的类型。并设置 CanUserAddRows = true。就这些了。
<DataGrid CanUserAddRows="True" AutoGenerateColumns="False" ItemsSource="{Binding SimpleCollection}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding B}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding C}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
public class SimpleClass
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
private ObservableCollection<SimpleClass> _simpleCollection;
public ObservableCollection<SimpleClass> SimpleCollection
{
get { return _simpleCollection ?? (_simpleCollection = new ObservableCollection<SimpleClass>()); }
set { _simpleCollection = value; }
}
我有一个应用程序有多个选项卡,每个选项卡包含一个数据网格,其中包含来自我的数据库的数据。我有一个将所有数据网格写入 .csv 文件的保存按钮。我想创建一个包含空数据网格的附加选项卡,以便用户可以键入信息,以便以相同的方式输出。
有没有办法将数据网格绑定到空数据table?或者是否有更好的解决方案允许用户动态输入可变数量的信息(有时一行,有时 10 行)
C#
DataTable dt_Call_Drivers = new DataTable();
Call_Drivers_DataGrid.ItemsSource = dt_Call_Drivers.DefaultView;
XAML
<DataGrid x:Name="Call_Drivers_DataGrid" ItemsSource="{Binding}" GridLinesVisibility="Horizontal" CanUserAddRows="true" AutoGenerateColumns="False" Margin="0,0,0,0">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MetroDataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Case" Width ="90" Binding="{Binding Case}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
只需将数据网格绑定到 ObservableCollection,定义您的类型。并设置 CanUserAddRows = true。就这些了。
<DataGrid CanUserAddRows="True" AutoGenerateColumns="False" ItemsSource="{Binding SimpleCollection}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding A}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding B}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding C}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
public class SimpleClass
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
private ObservableCollection<SimpleClass> _simpleCollection;
public ObservableCollection<SimpleClass> SimpleCollection
{
get { return _simpleCollection ?? (_simpleCollection = new ObservableCollection<SimpleClass>()); }
set { _simpleCollection = value; }
}