如何在 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<MyGrid>
并将 ItemsSource 与该集合绑定。
无需再次设置 ItemsSource,只需在该集合中添加对象即可。由于 ObservableCollection 实现了 INotifyCollectionChanged
,DataGrid 将自动刷新。
现在,您的代码存在几个问题。
-
如果您想添加一次项目,为什么要运行 for 循环并添加三次对象。
Remove the for loop
。
每次单击按钮时,您都会重新初始化列表。而是将列表保留为实例字段和 initialize list only once from class constructor
。
No 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)