【问题标题】:Help with rows in a datagrid帮助处理数据网格中的行
【发布时间】:2011-05-31 06:09:06
【问题描述】:

我有问题。我有一个应用程序,允许您右键单击数据网格中的一行,然后弹出一个菜单项,让您复制、移动或删除该行。当我单击这些选项之一时,我得到一个 nullReferenceException。当我逐步完成时,我在 qv.Name 上得到一个空值。有人有什么想法吗?另外,如果您需要更多代码,请告诉我。谢谢。

【问题讨论】:

  • 所以 qv 本身永远不会为空?只有 qv.Name 属性?如果是这样,我认为答案是您的 Name 属性未设置...并且不知道您的 QuarantineView 内部结构以及它如何与系统的其余部分进行交互,没有太多其他可以说...
  • 这是相当多的嵌套(甚至包括一组没有限定代码块的花括号)。我是否可以建议您反转其中一些条件以首先提供终止/中断条件以减少嵌套?
  • 那么你的 dgSystemView.SelectedItem 要么是 null 要么不是 QuarantineView 类型
  • 听起来该行不是 QuarantineView 类型,您能发布一下您是如何填充 DataGrid 的吗?

标签: c# wpf datagrid


【解决方案1】:

从你的代码中,我想你想要:

QuarantineViewDS.QuarantineViewRow qv = 
    dgSystemView.SelectedItem as QuarantineViewDS.QuarantineViewRow;

代替:

QuarantineView qv = dgSystemView.SelectedItem as QuarantineView;

【讨论】:

  • 那我在想dgSystemView.SelectedItem 是空的
  • 是的,看起来通过单击该行可能会“取消选择”该行,因此SelectedItem 将为空。有关详细信息,请参阅此帖子:stackoverflow.com/questions/2532485/right-click-on-grid-row
  • qvDS.QuarantineView.DefaultView的类型是什么?它是一个列表吗?
  • 是的,来自原始帖子。 (dgSystemView.DataContext = qvDS.QuarantineView.DefaultView;) DefaultView 的类型是什么?
  • 然后将其转换为 DataRowView 应该可以工作:DataRowView qv = dgSystemView.SelectedItem as DataRowView;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多