今天遇到一個問題就是在使用dev gridcontrol實現刪除後,再通過gridView1_FocusedRowChanged事件同步獲取當前行gridView1.GetFocusedRowCellValue("名稱").ToString()值的時候,報錯了下面的這個錯誤:
異常信息(異常類型:System.NullReferenceException) 異常信息:Object reference not set to an instance of an object. 引發當前異常的方法:Void gridView1_FocusedRowChanged(System.Object,DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) 出錯代碼位置:在執行到gridControl1.DataSource = dtParameter;時,回跳轉到gridView1_FocusedRowChanged函數private void BingingData()
{
DataTable dtParameter = new DataTable("Parameter");
ds1 = gs.getConfig("");
dtParameter.Columns.Add("名稱");
dtParameter.Columns.Add("內容");
if (judge_ds(ds1))
{
for (int i = 0; i < ds1.Tables[0].Columns.Count; i++)
{
dtParameter.Rows.Add(ds1.Tables[0].Columns[i].ToString(), ds1.Tables[0].Rows[0][i].ToString());
}
}
gridControl1.DataSource = dtParameter;
}
在進入到if循環後,獲取當前行的時候會報出上面的錯誤。 原因分析: 在刪除後,指針指向的那條數據已經不錯,所以在用GetFocusedRowCellValue獲取當前行值的時候,會出現找不到相應行的錯誤信息。 解決方案: 在刪除數據後,綁定數據之前將指針指向第一行。private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
if (gridView1.FocusedRowHandle > -1)
{
txtName.Text = gridView1.GetFocusedRowCellValue("名稱").ToString();
txtContent.Text = gridView1.GetFocusedRowCellValue("內容").ToString();
}
}
或者在獲取到要刪除的行後,強制修改焦點行。gs.OperateXml(gridView1.GetFocusedRowCellValue("名稱").ToString(),gridView1.GetFocusedRowCellValue("內容").ToString());
gridView1.MoveFirst();
BingingData();
if (this.gViewActList.FocusedRowHandle > 0)
{
this.gViewActList.FocusedRowHandle = this.gViewActList.FocusedRowHandle - 1;
}