带有空数据表的 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; }
}