【问题标题】:Looping through Datagrid for checked Checkboxs to create a list循环遍历 Datagrid 以检查复选框以创建列表
【发布时间】:2012-10-18 18:52:05
【问题描述】:

我有一个 Silverlight DataGrid,而不是一个 asp Gridview,它可以很好地填充。我添加了一个复选框列,供用户选择他们想要下载的项目。我的目标是创建一个“购物车”,用户可以在其中选择他们的项目,然后单击一个按钮来添加它们。然后他们会转到结帐页面等。

到目前为止,我的问题是我无法检查用户是否选中了复选框。我认为我的 foreach 循环很好,但我在 bool IsChecked 行中得到了一个“nullreferenceexception”。在断点期间,没有一个值像我看到的那样返回为 null,但它显然没有按我希望的方式工作。

foreach (var row in gridResults.ItemsSource)
        {
            bool IsChecked = (bool)((CheckBox)gridResults.Columns[8].GetCellContent(row)).IsChecked;

            if (IsChecked)
            {
                List<string> lstFile = new List<string>();
                string fileName = (gridResults.SelectedItem as JobSearchResult).FileName;
                lstFile.Add(fileName);
            }
        }

通过文件名,我可以找到服务器上的文件供他们下载,但是如何检查他们是否检查了他们想要的文件?

【问题讨论】:

  • 您是否已经通过“IsChecked 行”进行调试以验证究竟是什么部分引发了异常?
  • 它在那里遇到错误,然后直接进入我在 app.xaml.cs 中未处理的异常,这只会带来一个损坏的调试器。 (总是说你已经在调试这个,正在退出……)

标签: c# silverlight datagrid foreach


【解决方案1】:

如果不确切知道您是如何填充数据网格的,就很难告诉您问题的确切原因是什么。但我会告诉你我将如何处理这种情况。

创建对象类型的 ObservableCollection。将 DataGrid 的 ItemsSource 设置为 ObservableCollection。然后,在数据网格行中,为复选框的 IsChecked 属性创建一个绑定到对象上的某个公共布尔值(可能称为 IsSelected)。确保将绑定模式设置为双向。

然后,您所要做的就是在 ObservableCollection 上使用 linq 查询。请记住,Silverlight 是一个表示层,您根本不应该依赖它来执行业务逻辑。

【讨论】:

  • 它正在通过一个 linq 查询检索数据,该查询调用我创建的一个类来与数据库中的存储过程对话。它在很大程度上取决于输入哪些参数来获得结果。不是肯定的,但我认为重新分配 itemsource 会导致它无法正常运行(或其当前方式)
  • 这玩意是不是一直在刷新?如果是这样,数据网格如何不每次都刷新?为什么不能直接将查询结果转储到 ObservableCollection 中?
  • 好的,我得到了那部分的工作。它通过检查并且仅将选中的选项添加到列表中。但是它只添加了我“选择”的最新一个,如果在数据网格上上下滚动,它会删除所有不是我最后“选择”的内容
  • 继续发布您的 XAML。我认为问题在于您的数据绑定无法正常工作。
  • 是的,这是一个数据绑定问题,我最终创建了一个部分类来告诉我的模型 db 表中有一个 bool 字段而没有创建一个。我想我知道了,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-03-06
  • 2021-03-31
  • 2014-03-02
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多