在DataGrid中添加一行(WPF C#)

时间:2017-08-02 07:51:57

标签: c# wpf datagrid

我一直在寻找解决方案几个小时,但我找不到任何有用的东西。问题是:如何自动将信息添加到DataGrid的下一行,主要问题是我可以添加我想要的行数,但只能在第一次调用函数时添加。我知道它与绑定有关,所以这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Data;
using System.Windows.Forms;
using System.Web;

namespace Platforma
{
    public class MessageDataGrid
    {
        System.Windows.Controls.DataGrid data;
        int Number = 1;

        #region konstruktor
        public MessageDataGrid(System.Windows.Controls.DataGrid dataGrid)
        {
            this.data = dataGrid;
        }

        #endregion
        public void DataGridConnectionOK()
        {
            List<table> dialog = new List<table>();

            dialog.Add(new table() { No = Number.ToString(), Date = DateTime.Today.ToShortDateString(), Time = DateTime.Now.ToShortTimeString(), Message = "Connection is set correctly", Type = "" });
            Number++;
            data.ItemsSource = dialog;

        }
    }


    public class table
    {
        public string No { get; set; }
        public string Type { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
        public string Message { get; set; }
    }
}

我想在调用DataGridConnectionOK()后添加新行。我曾尝试在DataGrid对象(data.Items.Add(new DataGridRow()))的Items集合中添加项目,但我收到了有关未知异常的信息。这是XAML代码:

<DataGrid x:Name="DataGridInfos" ItemsSource ="{Binding}" HorizontalAlignment="Left" Height="162" Margin="0,369,0,0" VerticalAlignment="Top" Width="718" Foreground="#FF0043FF" Background="White" BorderBrush="#FF0081FF" AutoGenerateColumns="False" CanUserResizeRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding No}" Header="No" Width="30" IsReadOnly="True"/>
        <DataGridTextColumn Binding="{Binding Type}" Header="Type" Width="40" IsReadOnly="True"/>
        <DataGridTextColumn Binding="{Binding Date}" Header="Date" Width="100" IsReadOnly="True"/>
        <DataGridTextColumn Binding="{Binding Time}" Header="Time" Width="100" IsReadOnly="True"/>
        <DataGridTextColumn Binding="{Binding Message}" Header="Message" Width="448" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

2 个答案:

答案 0 :(得分:0)

据我所知,最好的解决方案是在viewmodel中创建一个List,并将列表数据绑定到datagrid;您将更改列表(添加/删除/修改),网格将相应更改。

您可以在这里找到MVVM的一些示例代码:https://www.codeproject.com/Articles/819294/WPF-MVVM-step-by-step-Basics-to-Advance-Level

答案 1 :(得分:0)

问题已经解决了 - 问题在于对象dialog - 它是Listtable类对象,但它不是,让我们来比如,在添加新数据时刷新,因此解决方案是添加而不是List类型ObservableCollection类对象,这是动态数据集合。