[英]Binding dataGridView to bindinglist and filter rows by textbox
[英]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();
有害行为:
绑定后发生
题:
附加信息:
我不确定可能需要哪些其他信息,但是我会提供所需的信息。
另外,如果我切换到其他代码迭代:
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.