DevExpress XtraGridコントロールを持つメインフォームを持つプログラムがあります。それは私のDBからのデータで多くの行を持っています。私は、選択した行を編集するために、編集フォームとメインフォーム上の編集ボタンを持っています。選択したオブジェクトの情報を編集フォームにプルできるようになりましたが、何らかの理由でUPDATEコマンドを実行するときに問題が再発しました。私はgridView1.GetFocusedRow()
と私のshowAttributesメソッドのために完全に働いたが、もはや動作しないように私のメインフォーム上の選択された行を参照しています。フォームの切り替え時にヌル参照
マイコードが続きます。 'call'がnullであるため、例外を戻しています。いくつかのことを書き留めておきます。最初の行を編集するだけの場合は、main.gridView1.Focus()
とmain.gridView1.FocusRowHandle(0)
を試してみました。問題は解決されていません。これは、行がまだ正確に焦点を当てているが、参照が何とか失われたと私に伝えているようだ。 Edit.csでMain.cs
private void btnEdit_Click(object sender, EventArgs e)
{
//This is the key, that lets you access an attribute of the selected row.
Object obj = gridView1.GetFocusedRow();
//1) Show NewEdit Form
Edit edit = new Edit();
edit.Show();
//2) Display properties of this object from DB
edit.showAttributes(obj);
}
で
:ここ
private void btnSubmit_Click(object sender, EventArgs e)
{
Main main = new Main();
Object obj = main.gridView1.GetFocusedRow();
try
{
performUpdate(obj);
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
}
public void performUpdate(Object call1)
{
Main main = new Main();
CallLog call = new CallLog();
call = call1 as CallLog;
executeSQLUpdate(call.Oid);
main.xpServerCollectionSource1.Reload();
}
はshowAttributesコードがある - 同じことを行いますが
public void showAttributes(Object call1)
{
try
{
Main main = new Main();
CallLog call = new CallLog();
call = call1 as CallLog;
txtCompany.Text = call.CompanyName;
txtFirst.Text = call.FirstName;
txtMiddle.Text = call.MiddleName;
txtLast.Text = call.LastName;
txtPhone.Text = call.PhoneNumber;
txtFax.Text = call.Fax;
txtEmail.Text = call.Email;
txtAttention.Text = call.Attention;
txtCareOf.Text = call.CareOf;
txtAddress1.Text = call.Address1;
txtAddress2.Text = call.Address2;
txtCity.Text = call.City;
txtState.Text = call.State;
txtZip.Text = call.ZipCode;
txtProvince.Text = call.Province;
txtCountry.Text = call.Country;
txtMessage.Text = call.Message;
txtResponse.Text = call.Response;
if (call.VIP == 1) { chkVIP.Checked = true; } else { chkVIP.Checked = false; }
if (call.ThreatCall == 1) { chkThreat.Checked = true; } else { chkThreat.Checked = false; }
if (call.FollowUp == 1) { chkFollowUp.Checked = true; } else { chkFollowUp.Checked = false; }
if (call.EscalationRequired == 1) { chkEscalation.Checked = true; } else { chkEscalation.Checked = false; }
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
return;
}
}
の作品 また... 私はこれをいくつかの方法で、パラメーターなしで、別の場所などで試してみました。問題はmain.gridView1.GetFocusedRow()
がnullを返すことです。また、メインフォームから一連のメソッドとして実行すると、どちらも機能しません(gridView1.GetFocusedRow()
もnullです)。 Edit.csで
[.NETのNullReferenceExceptionは何ですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –