如何解决C#WPF附加数据网格
我似乎只能让它添加第一行,但随后它停止了。我想基本上将其用作保存程序历史记录的方法。因此,每次单击按钮时,都会添加一个新行。显然,该代码将添加除当前时间戳之外的静态信息。
谢谢!
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; }
}
解决方法
在按钮外部设置此设置,点击 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。这就是网格中只有一行的原因
-
您无需在click事件中调用InitializeComponets。这属于构造函数。
-
对网格的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",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",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",Timestamp = nowtime });
}
您需要使用ObservableCollection<T>
使控件在添加新项目时得到通知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。