0

情况:

我正在尝试BindingList<string[]>将从 LINQ to SQL 查询构造的绑定到DataGridView.

问题:

我要么无法修改生成后的项目 - 要么 - 我在我的(这取决于我使用的代码的哪个迭代)中DataGridView得到了一堆不需要的字段DataGridView我在网上找了没用。

我知道字符串的实际值没有公共属性。我很难确定如何检索它(我相信这是问题的一部分)。

C#

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules 
    where p.ModuleName.Equals(clbModules.SelectedItem) 
    select p.ModuleId)
    .FirstOrDefault();

BindingList<string[]> Data = new BindingList<string[]>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers
    where p[2].Equals(item)
    select new string[] { p[0].ToString(), p[3].ToString() })
    .ToList());

dgvQuestions.DataSource = Data;
dgvQuestions.Refresh();

不良行为:

这发生在绑定之后

数据网格视图

问题:

  1. 为什么会这样?
  2. 我如何解决它?

附加信息:

我不确定可能需要哪些额外信息,但我会提供所需的信息。

另外,如果我切换到其他代码迭代:

int item = (from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].Modules where p.ModuleName.Equals(clbModules.SelectedItem) select p.ModuleId).FirstOrDefault();
            var Data = new BindingList<object>((from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers where p[2].Equals(item) select new {Question = p[0].ToString(), Answer = p[3].ToString() }).Cast<object>().ToList());
            dgvQuestions.DataSource = Data;
            dgvQuestions.Refresh();
            dgvQuestions.Columns[1].ReadOnly = false;

我可以正确查看数据,但无法编辑我想要的列。

4

2 回答 2

1

您正在绑定到一个字符串数组列表,并且您正在从数组中获取属性。您很可能想要以下内容:

var Data = new BindingList<object>((
    from p in CurrentConversion.Companies[lbCompanies.SelectedIndex].QuestionAnswers 
    where p[2].Equals(item) 
    select new {
                Val1 = p[0].ToString(), 
                Val2 = p[3].ToString() 
               }).ToList());
于 2013-02-05T21:13:47.887 回答
0

您在 Grid 中看到这些字段的原因是您将每一行绑定到string[]. 所以它会自动将属性显示string[]为列。网格没有内置逻辑来解析数组并将数组的内容用作列。

为了DataGrid正确显示您的数据,您应该将其绑定到自定义类型,并且它将使用该类型的公共属性作为列。

于 2013-02-05T21:14:02.380 回答