很多人問到在使用DevExpress GridControl控件時,在使用了 gridView1.AddNewRow()後,爲什麼gridView1_InitNewRow不觸發?
網上有很多解釋,總結起來大概有如下三條:
1、 gridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;
2、 gridView1.OptionsBehavior.Editable = true;
3、 GridControl必須要用以下形式的綁定數據源。
BindingSource bdSource = new BindingSource();
bdSource.DataSource = InitDt();
this.gridControl1.DataSource = bdSource;
其實主要原因和這些都沒有關係。
真正的原因是GridControl.DataSource=數據源。哪怕是沒有記錄的數據源。否則gridView1_InitNewRow是不會觸發的。
下面是本文的測試Demo代碼:註釋掉多餘的部分,程序照樣測試通過。
public partial class Form1 : Form
{
//BindingSource bdSource = new BindingSource();
public Form1()
{
InitializeComponent();
//bdSource.DataSource = InitDt();
this.gridControl1.DataSource = InitDt();
}
private void button1_Click(object sender, EventArgs e)
{
//gridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;
//gridView1.OptionsBehavior.Editable = true;
gridView1.AddNewRow();
}
private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
{
MessageBox.Show("觸發事件測試");
}
private DataTable InitDt()
{
DataTable dt = new DataTable("個人簡歷");
//dt.Columns.Add("id", typeof(int));
//dt.Columns.Add("name", typeof(string));
//dt.Columns.Add("sex", typeof(int));
//dt.Columns.Add("address", typeof(string));
//dt.Columns.Add("aihao", typeof(string));
//dt.Columns.Add("photo", typeof(string));
//dt.Rows.Add(new object[] { 1, "張三", 1, "東大街6號", "看書", "" });
//dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2號", "上網,遊戲", "" });
//dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3號", "上網,逛街", "" });
//dt.Rows.Add(new object[] { 1, "錢八", 0, "北大街5號", "上網,逛街,看書,遊戲", "" });
//dt.Rows.Add(new object[] { 1, "趙九", 1, "中大街1號", "看書,逛街,遊戲", "" });
return dt;
}
}
視圖: