【问题标题】:DataGrid with Empty DataTable to allow user input C# WPF带有空 DataTable 的 DataGrid 以允许用户输入 C# WPF
【发布时间】:2015-07-30 15:32:47
【问题描述】:

我有一个应用程序,它有多个选项卡,每个选项卡都包含一个 Datagrid,其中包含来自我的数据库的数据。我有一个保存按钮,可将所有数据网格写入 .csv 文件。我想创建一个包含空数据网格的附加选项卡,以便用户可以键入信息,以便以相同的方式输出。

有没有办法将数据网格绑定到空数据表?或者是否有更好的解决方案允许用户动态输入可变数量的信息(有时一行,有时 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>

【问题讨论】:

    标签: c# wpf xaml data-binding datagrid


    【解决方案1】:

    只需将数据网格绑定到 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; }
    }
    

    【讨论】:

    • 非常感谢!这很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2015-04-18
    • 2011-04-21
    相关资源
    最近更新 更多