【问题标题】:How to add empty row to the DataGrid?如何将空行添加到 DataGrid?
【发布时间】:2016-04-21 23:31:50
【问题描述】:

我需要让用户直接在DataGrid中添加信息但是放“CanUserAddRows”属性不起作用,只出现如下:

这是我的数据网格:

<DataGrid x:Name="dtgPersons" Grid.Row="3" CanUserAddRows="True">
     <DataGrid.Columns>
         <DataGridTextColumn Header="N°" Width="*" />
         <DataGridTextColumn Header="Name" Width="*" />
         <DataGridTextColumn Header="Carrer" Width="*" />
         <DataGridTextColumn Header="Group" Width="*" />
         <DataGridTextColumn Header="Age" Width="*" />
     </DataGrid.Columns>
 </DataGrid>

编辑

这是新的网格代码:

<DataGrid x:Name="dtgPerson" Grid.Row="3" ItemsSource="{Binding lstPerson}" AutoGenerateColumns="False" CanUserAddRows="True">
     <DataGrid.Columns>
         <DataGridTextColumn Header="N°" Width="*" Binding="{Binding No}" />
         <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}" />
         <DataGridTextColumn Header="Carrer" Width="*" Binding="{Binding Carrer}" />
         <DataGridTextColumn Header="Group" Width="*" Binding="{Binding Group}" />
         <DataGridTextColumn Header="Age" Width="*" Binding="{Binding Age}" />
     </DataGrid.Columns>
</DataGrid>

这是我的代码: 我的 ObservableCollection:

public ObservableCollection<Person> lstPerson { get; set; }

我的主窗口

public MainWindow()
{
     InitializeComponent();
     DataContext = this;
     lstPerson = new ObservableCollection<Person>();
}

我的个人类

public class Person
{
    public int No { get; set; }
    public string Name { get; set; }
    public string Carrer { get; set; }
    public string Group { get; set; }
    public int Age { get; set; }
}

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    1) 改变你的网格 xaml

       <DataGrid ItemsSource="{Binding GridCollection}" 
                 CanUserAddRows="True" 
                 AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="N°" Binding="{Binding Number}" Width="*" />
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="*" />
                <DataGridTextColumn Header="Carrer" Binding="{Binding Career}" Width="*" />
                <DataGridTextColumn Header="Group" Binding="{Binding Group}" Width="*" />
                <DataGridTextColumn Header="Age" Binding="{Binding Age}" Width="*" />
            </DataGrid.Columns>
        </DataGrid>
    

    2) 在 ViewModel 或 CodeBehind 中定义您的集合

    public ObservableCollection<gridDataModel> GridCollection { get; set; }
    

    3) 使用前初始化收集

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        GridCollection = new ObservableCollection<gridDataModel>();
    }
    

    4) 完成后,您可以通过 GUI 在网格中添加项目,它们将存储在 collection

    【讨论】:

    • 效果很好,但我仍然可以添加行。加载表单时,它出现一行,我可以插入数据,但是,按回车,向我发送此错误:PresentationFramework.dll 中“System.InvalidOperationException”类型的未处理异常注意:双向链接需要路径或XPath。 感谢您抽出宝贵时间,@galakt
    • @Richard 你的数据模型怎么样?因为在我的解决方案中输入和标签工作正常
    • @Richard 是的,但你没有发布你的Person
    • @Richard 看起来不错 =\
    • 如果您正在使用此解决方案并有自定义对象,只需添加此内容,您的自定义对象需要一个无参数构造函数
    【解决方案2】:

    您必须定义 ItemsSource。

    在你的代码后面:

    List<YourObj> list = new List<YourObj>();
    dtgPersons.ItemsSource = list;
    

    【讨论】:

    • 我试过但没有用,我添加了一些空对象但无法对创建的单元格进行编辑。
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多