繁体   English   中英

绑定列表 <string[]> 到datagridview

[英]Binding BindingList<string[]> to datagridview

情况:

我试图将LINQ构造的BindingList<string[]>绑定到SQL查询到DataGridView

问题:

我既不能进行修改到DataGridView后产生的项目-或者我在弄了一堆不需要的字段的DataGridView (这取决于我使用的我的代码迭代)我用Google搜索硬如我可以和试图实施的最我在网上找到的解决方案无济于事。

我知道字符串的实际值没有公共属性。 我在确定如何检索该值时遇到了困难(我相信这是问题的一部分)。

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;

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

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

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());

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM