繁体   English   中英

C# WPF 添加数据网格

[英]C# WPF Appending DataGrid

我似乎只能让它添加第一行,但随后它停止了。 我想基本上将它用作保存程序历史记录的一种方式。 因此,每次单击按钮时,都会添加一个新行。 显然,代码会添加 static 信息,但现在的时间戳除外。

谢谢!!

      private void test_Click(object sender, RoutedEventArgs e)
    {

        {
            InitializeComponent();

            string nowtime = DateTime.Now.ToString("MM/dd/yyyy HH:mm");

            List<User> users = new List<User>();
            users.Add(new User() { ID = "1", Query = "John Doe", Timestamp = nowtime });

            historyData.ItemsSource = users;
        }
    }

    public class User
    {
        public string ID { get; set; }
        public string Query { get; set; }
        public string Timestamp { get; set; }
    }

在按钮之外设置这个 click List<User> users = new List<User>();

在你的按钮上,

private void Button_Click(object sender, RoutedEventArgs e)
{
    string nowtime = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");

    users.Add(new User() { ID = "1", Query = "John Doe", Timestamp = nowtime });

    // To refresh datagrid source set null first then the data.
    historyData.ItemsSource = null;
    historyData.ItemsSource = users;
}

发布的代码有一些问题:

  1. 每次触发 click 事件时,您都会创建一个新列表,并将这个新列表设置为 ItemsSource。 这就是为什么网格中只有一行的原因

  2. 您在点击事件中不必要地调用了 InitializeComp.nets。 这属于构造函数。

  3. 对网格的 ItemsSource 使用 ObservableCollection 而不是 List。 这将消除每次发生更改时不断分配新列表的需要。

这些变化看起来像这样:

private readonly ObservableCollection<User> users = new ObservableCollection<User>();

....

public Form1()
{
    InitializeComponets ();
    ....
    historyData.ItemsSource = users;
}

....

private void test_Click(object sender, RoutedEventArgs e)
{
    string nowtime = DateTime.Now.ToString("MM/dd/yyyy HH:mm");

    users.Add(new User() { ID = "1", Query = "John Doe", Timestamp = nowtime });
}

将新项目直接添加到Items属性:

private void test_Click(object sender, RoutedEventArgs e)
{
    string nowtime = DateTime.Now.ToString("MM/dd/yyyy HH:mm");
    historyData.Items.Add(new User() { ID = "1", Query = "John Doe", Timestamp = nowtime });
}

或者设置一次ItemsSource并保留对源集合的引用:

private readonly ObservableCollection<User> _users = new ObservableCollection<User>();

public MainWindow()
{
    InitializeComponent();
    historyData.ItemsSource = _users;
}

private void test_Click(object sender, RoutedEventArgs e)
{
    string nowtime = DateTime.Now.ToString("MM/dd/yyyy HH:mm");
    _users.Add(new User() { ID = "1", Query = "John Doe", Timestamp = nowtime });
}

您需要使用ObservableCollection<T>以便在添加新项目时通知控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM