Mau*_*uro 5 c# datagridview winforms
我无法理解为什么我的DataGridView保持为空(没有行,没有自动生成的列):
BindingList<MyObject> bList = new BindingList<MyObject>();
fileStream.Position = 0;
MyObject.Deserialize(fileStream).ForEach(
j => bList.Add(j));
this.bindingSource1.SuspendBinding();
this.dataGridView1.Columns.Clear();
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.Enabled = false;
this.dataGridView1.Invalidate();
this.bindingSource1.DataSource = bList;
this.dataGridView1.DataSource = bindingSource1;
this.bindingSource1.ResumeBinding();
this.dataGridView1.Enabled = true;
this.dataGridView1.Refresh();
Run Code Online (Sandbox Code Playgroud)
其中MyObject定义为
public class MyObject
{
public DateTime CreationDate;
public string CreationId;
public static List<MyObject> Deserialize(Stream s)
{
XDocument xml = XDocument.Load(s);
var ps = from p in xml
.Descendants("p")
.Descendants("object")
select
new MyObject
{
CreationId = p.Attribute("creationid").Value
};
return ps.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
另外,如果我明确地将列设置如下,则将行添加到网格中,但它们都是空的
DataGridViewTextBoxColumn dc = new DataGridViewTextBoxColumn();
dc.DataPropertyName = "CreationDate";
dc.HeaderText = "CreationDate";
dc.Name = "CreationDate";
dc.Visible = true;
dc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
this.dataGridView1.Columns.Add(dc);
dc = new DataGridViewTextBoxColumn();
dc.DataPropertyName = "CreationId";
dc.HeaderText = "CreationId";
dc.Name = "CreationId";
dc.Visible = true;
dc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
this.dataGridView1.Columns.Add(dc);
Run Code Online (Sandbox Code Playgroud)
在 Winforms 项目中,尝试使用此代码(类似于您发布的内容的模拟器 & it works !),然后将/调试到现有代码以缩小问题范围:-
DataGridView dgv = new DataGridView();
//Note: AutogenerateColumns is true by default
BindingSource bs = new BindingSource();
BindingList<Customer> bList = new BindingList<Customer>();
// Fill bList with Customers
bList.Add(new Customer(){Name="John"});
bs.DataSource = bList;
dgv.DataSource = bs;
this.Controls.Add(dgv);
Run Code Online (Sandbox Code Playgroud)
MyObject等价物:-
public class Customer
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,to Debug your code 通过映射到上述一个,您可以删除这些位 -
this.bindingSource1.SuspendBinding();
this.dataGridView1.Columns.Clear();
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.Enabled = false;
this.dataGridView1.Invalidate();
this.bindingSource1.ResumeBinding();
this.dataGridView1.Enabled = true;
this.dataGridView1.Refresh();
Run Code Online (Sandbox Code Playgroud)
&just have this在第一次审判中 -
this.bindingSource1.DataSource = bList;
this.dataGridView1.DataSource = bindingSource1;
Run Code Online (Sandbox Code Playgroud)