我如何在wpf中向datagrid中添加新行?

时间:2014-06-07 08:04:43

标签: c# wpf datagrid

我试图在每次单击按钮时插入DataGrid的所有行值, 所以如果用户在datagrid三行上插入三次显示,我有一个类有代码

    public string Name { get; set; }
    public string Job { get; set; }
    public string Phone { get; set; }

    public MyGrid(string Vendors,string Jobs,string Tel)
    {
        Name = Vendors;
        Job = Jobs;
        Phone = Tel;
    }

我在这里调用了按钮点击事件

       static List<MyGrid> gride;
        gride = new List<MyGrid>();
        for (int i = 0; i < 3; i++)
        {
            var myg1 = new MyGrid(textBox10.Text, textBox11.Text, textBox12.Text);
            gride.Add(myg1);

        }

        dataGridView1.ItemsSource = gride; 

此代码可以正常工作,但有一个问题,当添加数据应该出现在一行中,但在一次点击时出现在3行内, 我希望每次点击显示一行不同的数据。 我如何在wpf

中的按钮上添加新行

1 个答案:

答案 0 :(得分:1)

首先,这不是一种做WPF方式的方法。使用适当的绑定来实现您的目标。

以WPF方式执行的步骤:

  1. 创建ObservableCollection<MyGrid>并将ItemsSource与该集合绑定。
  2. 不再重新设置ItemsSource,只需在该集合中添加对象即可。由于ObservableCollection实现 INotifyCollectionChanged ,DataGrid将自动刷新。

  3. 现在,对于您的代码,存在一些问题。

    1. 如果你想要一次添加项目,为什么要运行循环并添加三次对象。的 Remove the for loop 即可。
    2. 点击每个按钮,即表示您正在重新初始化列表。而是将列表保留为实例字段,并 initialize list only once from class constructor
    3. 点击每个按钮
    4. No need to set ItemsSource again

    5. public class CodeBehindClass
      {
         private ObservableCollection<MyGrid> gride;
         public CodeBehindClass()
         {
            gride = new ObservableCollection<MyGrid>();
            dataGridView1.ItemsSource = gride;
         }
      
         private void ButtonHandler(object sender, RoutedEventArgs e)
         {
            var myg1 = new MyGrid(textBox10.Text, textBox11.Text, textBox12.Text);
            gride.Add(myg1);
         }
      }