如何在 wpf 中将新行添加到数据网格中?

Posted

技术标签:

【中文标题】如何在 wpf 中将新行添加到数据网格中?【英文标题】:How i can add new row into datagrid in wpf? 【发布时间】:2014-07-28 12:16:25 【问题描述】:

我正在尝试每次单击按钮时插入 DataGrid 的所有 Rows 值, 所以如果用户在数据网格上插入三行显示三行,我有一个类有代码

    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 中每次单击按钮添加新行

【问题讨论】:

如果你只想添加一次,为什么要循环三次?然后删除 for 循环。 @RohitVats 当我删除 for 循环时,数据只添加了一次,但是当我写入新数据并单击添加按钮时,行数据已更改,我想在同一行添加未更改的新行 除此之外,您的代码中还有几个问题。我已经添加了一个答案。看看有没有帮助。 【参考方案1】:

首先这不是一种做WPF的方式。使用适当的绑定来实现你想要的。

WPF方式的步骤:

    创建 ObservableCollection&lt;MyGrid&gt; 并将 ItemsSource 与该集合绑定。 无需再次设置 ItemsSource,只需在该集合中添加对象即可。由于 ObservableCollection 实现了 INotifyCollectionChanged,DataGrid 将自动刷新。

现在,您的代码存在几个问题。

    如果您想添加一次项目,为什么要运行 for 循环并添加三次对象。 Remove the for loop。 每次单击按钮时,您都会重新初始化列表。而是将列表保留为实例字段和 initialize list only once from class constructorNo need to set ItemsSource again 每次点击按钮。

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);
   

【讨论】:

谢谢它现在正在工作,但我还有一个问题,我如何循环它们以便在数据库中插入所有行 您可以使用for循环然后运行循环等于数据库中的记录数并将它们添加到集合中。 如果您不介意,我有一个问题请教我如何捕获像这样的值单元格 dataGridView1.Rows[i].Cells[0].Value 可以参考这个链接social.msdn.microsoft.com/Forums/vstudio/en-US/…。

以上是关于如何在 wpf 中将新行添加到数据网格中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在加载之前检查所有数据加载将新行添加到网格中(ExtJS 3.2)

如何在C#中将列表与WPF数据网格绑定?

如何在单击按钮时复制和添加现有的网格元素(C#WPF)

如何让 WPF DataGrid 单元格右对齐而不使新行上的可选区域变小?

如何将新行添加到数据表 vb.net

WPF C#,如何将数据从数据网格添加到数据库