【问题标题】:silverlight crashes as datagrid in edit loses focusSilverlight 崩溃,因为编辑中的数据网格失去焦点
【发布时间】:2011-06-10 17:59:03
【问题描述】:

所以事情是这样的:我有两个用于编辑数据的数据网格。一个编辑字符串数组,第二个编辑包含多个数据字段的对象数组(本质上是某种矩阵)。

由于某种原因,当我单击第一个数据网格(用于字符串数组)以编辑特定单元格时,如果我单击数据网格外部的其他位置(例如,外部按钮)退出编辑,界面会挂起,并且然后 Chrome(或 IE)崩溃。即使我在 VS 中以调试模式运行应用程序,也没有引发错误。

有人知道如何解决这个错误吗?

在 MainPage.xaml 中:

<sdk:DataGrid AutoGenerateColumns="True" Canvas.Left="14" Canvas.Top="88" Height="165" Name="ObjectsGrid" Width="196" KeyDown="ObjectsGrid_KeyDown" CellEditEnding="ObjectsGrid_CellEditEnding">

在 MainPage.xaml.cs 中:

private void ObjectsGrid_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
        {
            if (ObjectsGrid.SelectedItem != null)
            {
                ArrayOfString s = (ArrayOfString)ObjectsGrid.ItemsSource;
                s.Remove((String)ObjectsGrid.SelectedItem);
                ObjectsGrid.ItemsSource = null;
                ObjectsGrid.ItemsSource = s;
            }
        }
    }

private void ObjectsGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
        DataGrid tGrid = (DataGrid)sender;
        String c = ((TextBox)e.EditingElement).Text;

        HashtableCollection[_currentCorrespondingItem].DataBoundObject[tGrid.SelectedIndex] = c;
    }

这失败了。

【问题讨论】:

  • btw - 有时当我编辑字段时,在退出编辑模式后,整个屏幕就会变成空白。关于实现的一些信息,我在第一个数据网格(带有字符串数组)上实现了 CellEditEnding 事件,在第二个数据网格上实现了 RowEditEnding 事件。

标签: .net silverlight silverlight-4.0 datagrid


【解决方案1】:

它是否到达 HitsGrid_CellEditending?如果是这样,请在“DataGrid tGrid”之前的 { 处放置一个括号,并按住 F11 直到出现错误。如果你得到任何。如果没有出现错误,我只能假设您在 HintsGrid_CellEditEnding 中执行的操作会清除您的数据网格甚至应用程序。

【讨论】:

  • 我已经包含了其中一个网格的代码(绑定了字符串数组的那个)。如果我尝试编辑任何字段,然后在网格外部单击,silverlight 会崩溃。
  • 顺便说一句,中断在 Unhandled 中不起作用,silverlight 应用程序完全挂起,它没有将任何内容发送回 VS :( 这很奇怪,它在 IE 和 Chrome 中都存在。
  • User367696,目前正在工作,今晚我将尝试构建您的项目,看看是否可以找到有关您的错误的更多信息。半夜回来看看我的进度。如果您能稍微解释一下 BopComCollection,它会有所帮助,这是什么?我在谷歌上找不到任何关于它的信息
  • 你们好。我刚刚想通了。我稍微更改了上面的代码,所以这些东西是什么更明显。我发现问题出在这里: HashtableCollection[_currentCorrespondingItem].DataBoundObject[tGrid.SelectedIndex] = c; ===> 此行必须在 Cell_EditEnded 事件中执行,而不是在 Cell_EditEnding 事件中执行。我认为后者用于获取有关编辑的信息,而前者用于保存。一旦我将“保存到数据结构”行移至 EditEnded,一切正常! :)
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2015-02-04
  • 2016-09-26
相关资源
最近更新 更多