我有一个简单的C#Windows窗体应用程序,它应该显示一个DataGridView.作为DataBinding,我使用了一个Object(选择了一个名为Car的类),这就是它的样子:
class Car
{
public string color { get; set ; }
public int maxspeed { get; set; }
public Car (string color, int maxspeed) {
this.color = color;
this.maxspeed = maxspeed;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我在DataGridView属性设置AllowUserToAddRows到true,仍然有不小的*这让我添加行.
然而,有人建议设置carBindingSource.AllowAdd为true,当我这样做时,我得到一个MissingMethodException说我的构造函数找不到.
Dav*_*all 12
您的Car类需要一个无参数构造函数,您的数据源需要类似于BindingList
将Car类更改为:
class Car
{
public string color { get; set ; }
public int maxspeed { get; set; }
public Car() {
}
public Car (string color, int maxspeed) {
this.color = color;
this.maxspeed = maxspeed;
}
}
Run Code Online (Sandbox Code Playgroud)
然后绑定这样的东西:
BindingList<Car> carList = new BindingList<Car>();
dataGridView1.DataSource = carList;
Run Code Online (Sandbox Code Playgroud)
您也可以使用BindingSource,但您不必使用BindingSource,但BindingSource提供了一些有时可能需要的额外功能.
如果由于某种原因你绝对无法添加无参数构造函数,那么你可以处理绑定源的添加新事件并调用Car参数化构造函数:
设置绑定:
BindingList<Car> carList = new BindingList<Car>();
BindingSource bs = new BindingSource();
bs.DataSource = carList;
bs.AddingNew +=
new AddingNewEventHandler(bindingSource_AddingNew);
bs.AllowNew = true;
dataGridView1.DataSource = bs;
Run Code Online (Sandbox Code Playgroud)
和处理程序代码:
void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
e.NewObject = new Car("",0);
}
Run Code Online (Sandbox Code Playgroud)
您需要添加 AddingNew 事件处理程序:
public partial class Form1 : Form
{
private BindingSource carBindingSource = new BindingSource();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = carBindingSource;
this.carBindingSource.AddingNew +=
new AddingNewEventHandler(carBindingSource_AddingNew);
carBindingSource.AllowNew = true;
}
void carBindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
e.NewObject = new Car();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11201 次 |
| 最近记录: |