C# 在Datagrid中循环选中复选框以创建列表

C# 在Datagrid中循环选中复选框以创建列表,c#,silverlight,datagrid,foreach,C#,Silverlight,Datagrid,Foreach,我有一个Silverlight DataGrid,而不是asp Gridview,可以很好地填充。我添加了一个复选框列,供用户选择要下载的项目。我的目标是创建一个“购物车”,用户可以在其中选择他们的项目,然后单击按钮添加它们。然后他们将进入结账页面等 到目前为止,我的问题是,我无法检查用户是否选中了复选框。我认为我的foreach循环很好,但是我在boolischecked行中得到了一个“nullreferenceexception”。在断点期间,没有一个值返回到我看到的空值,但它显然没有按照我

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

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

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);
            }
        }
foreach(gridResults.ItemsSource中的变量行)
{
bool IsChecked=(bool)((复选框)gridResults.Columns[8].GetCellContent(row)).IsChecked;
如果(已检查)
{
List lstFile=新列表();
字符串文件名=(gridResults.SelectedItem作为JobSearchResult);
添加(文件名);
}
}

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

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

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


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

您是否已经通过“IsChecked line”进行了调试,以验证引发异常的确切部分是什么?它在那里遇到了错误,然后直接指向app.xaml.cs中未处理的异常,这会带来一个坏掉的调试器。(总是说您已经在调试这个,正在退出…)它是通过linq查询来检索数据的,该查询调用我创建的一个类来与数据库中的存储过程进行对话。这在很大程度上取决于输入哪些参数以获得结果。不是积极的,但是我认为重新分配itemsource会导致它不能正常工作(或者它的当前方式),这是不是一直在刷新?如果是这样的话,那么datagrid如何不会每次都刷新?为什么不能直接将查询结果转储到ObservaleCollection中呢?好的,我已经完成了这部分工作。它通过检查,并且只将选中的选项添加到列表中。但是,它只添加我“选择”的最新版本,如果在datagrid上上下滚动,它会删除所有不是我上次“选择”的内容,继续发布您的XAML。我认为问题在于你的数据绑定没有正常工作。是的,这是一个数据绑定问题,我最终创建了一个分部类来告诉我的模型db表中有一个bool字段,而没有创建一个。我想我拿到了,谢谢你的帮助。