完全绑定WPF DataGrid数据后执行操作

时间:2012-03-07 14:16:58

标签: wpf datagrid

我正在使用旧的Windows窗体应用程序,我正在转换为WPF。作为其中的一部分,有一个按钮,当单击时,它创建一个全新的DataGridView并将其添加到页面,将其绑定到SQL查询中的数据。这些数据可以写回数据库,但是在数据末尾添加了一个新列,并带有一个复选框,当复选框被更改时,行中的ID将与另一个方法一起传递给另一个方法。复选框。

在WPF中,我有动态网格创建工作和数据绑定。发现我无法直接将列添加到DataGrid本身,我在绑定之前已将其添加到源DataSet表中。这适用于所有数据以及每行的复选框。但是,单击单个复选框时,我无法触发事件。

我已设法在http://forums.silverlight.net/t/11547.aspx找到一些代码,这会导致每次更改复选框时提交行,因为我传递ID和bool值的代码当前位于EditEnding事件中。最初,UpdateSourceTrigger通过在DataGrid的“Loaded”事件期间循环遍历复选框列中的每一行来添加到每个复选框,但现在失败了,并且在一些互联网搜索之后,似乎是因为“Loaded”不保证数据已完成绑定,我发现DataGrid.Items包含的项目多于事件触发时网格中的容器。下面是我试图用来绑定UpdateTrigger的代码,但是在第32行突然,ContainerFromIndex方法返回null。此时dgvNew.Items中有69个项目。

dgvNew.Loaded += new RoutedEventHandler(delegate(object sender, RoutedEventArgs e)
        {
            for (var i = 0; i < dgvNew.Columns.Count; i++)
            {
                DataGridBoundColumn column = dgvNew.Columns[i] as DataGridBoundColumn;
                if (column != null && column.Header.ToString() == "HasPermission")
                {
                    for (var j = 0; j < dgvNew.Items.Count; j++)
                    {
                        DataGridRow row = (DataGridRow)dgvNew.ItemContainerGenerator.ContainerFromIndex(j);
                        UpdateSourceTriggerHelper.SetUpdateSourceTrigger(column.GetCellContent(row), true);
                    }
                }
            }
        });

我还尝试在for ItemContainerGenerator.StatusChanged的事件处理程序中包装for循环,并检查Status是ItemsGenerated,但这也没有帮助。

任何人都可以在代码或理解中看到我出错的地方吗?

0 个答案:

没有答案