簡體   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