将BindingList <string []>绑定到datagridview </string []>

时间:2013-02-05 20:52:18

标签: c# winforms

情况:

我正在尝试将从LINQ to SQL查询构造的BindingList<string[]>绑定到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();

不需要的行为:

绑定后发生这种情况

datagridview

问题:

  1. 为什么会这样?
  2. 我该如何解决?
  3. 其他信息:

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

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

    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;
    

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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

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

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