[英]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.