[英]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;
}
发布的代码有一些问题:
每次触发 click 事件时,您都会创建一个新列表,并将这个新列表设置为 ItemsSource。 这就是为什么网格中只有一行的原因
您在点击事件中不必要地调用了 InitializeComp.nets。 这属于构造函数。
对网格的 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.