所以我需要在网格中显示人们输入的数字列表,以帮助他们仔细检查他们的工作。它几乎可以工作,除了它没有显示数字。我的设置很简单。我有一个文本框,他们输入数字,当点击添加按钮时,它被添加到BindingList,然后用作DataGridView的数据源。
所以,在Stackoverflow Post的帮助下,我得到了一半的工作。 不幸的是,即使它似乎每次都没有正确显示值时添加一行Grid。 它将新行显示为空。
这是我的代码。
public partial class ManualEntry : Form
{
BindingList<long> ProjectIDs;
public ManualEntry()
{
InitializeComponent();
ProjectIDs = new BindingList<long>();
}
单击添加按钮后,将执行此操作。
private void AddButton_Click(object sender, EventArgs e)
{
try
{
long temp = long.Parse(textBox1.Text);
ProjectIDs.Add(temp);
ProjectsGrid.DataSource = ProjectIDs;
textBox1.Text = "";//clear the textbox so they can add a new one.
}
catch//bring up the badinput form
{
BadInput b = new BadInput();
b.Show();
}
}
所以这是添加几个数字的结果。
如果您需要我的任何其他代码来帮助您回答问题,请询问。
答案 0 :(得分:3)
您还没有告诉DataGridViewColumn要绑定的内容。
通常绑定到绑定数据类型的公共属性。在这种情况下,您的数据类型为long
,它没有适当的属性可以绑定。
将您的long
包装在自定义类中,并将其作为公共属性公开。
public class Data
{
public long Value { get; set; }
}
将列绑定到Value
属性。您可以在设计器中执行此操作,但这里是代码:
Column1.DataPropertyName = "Value";
现在使用long
代替Data
:
ProjectIDs = new BindingList<Data>();
...
long temp = long.Parse(textBox1.Text);
ProjectIDs.Add(new Data { Value = temp });
答案 1 :(得分:1)
以下文章讨论了这个问题:
DataGridView bound to BindingList does not refresh when value changed
看起来绑定列表中的数据类型需要支持INotifyPropertyChanged接口:
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
注意:修改 - 我对INotifyPropertyChanged的使用不正确,似乎也不需要。 现在这个答案基本上就像Igby一样 - 所以我认为他是更好的答案:)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ProjectIDs = new BindingList<AwesomeLong>();
var source = new BindingSource( ProjectIDs, null );
dataGridView1.DataSource = source;
dataGridView1.Columns.Add( new DataGridViewTextBoxColumn() );
}
BindingList<AwesomeLong> ProjectIDs;
private int i = 0;
private void button1_Click( object sender, EventArgs e )
{
i++;
ProjectIDs.Add(new AwesomeLong(i));
}
}
public class AwesomeLong
{
public long LongProperty { get; set; }
public AwesomeLong( long longProperty )
{
LongProperty = longProperty;
}
}
}