PDA

View Full Version : سوال: خطای NullRefrence هنگام جستجو در دیتاگرید



momimomi
شنبه 13 اردیبهشت 1393, 23:53 عصر
برنامه نویسان عزیز سلام
یک دیتاگریدویو دارم که به صورت کدنویسی با دیتابیس پر میشه و یک تکست باکس هم دارم که جستجو روی دیتاگرید رو انجام میده، در رویداد text_Change تکست باکس متد SearchPersonel را فراخوانی میکنم که کدهاش به شکل زیر هست:



#region SearchPersonel
void SearchPersonel()
{
string query = null;
try
{
switch (cmbSearch.Text)
{
case "نام":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.fname like '" + txtSearch.Text + "%'"; break;
}


case "نام خانوادگی":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.lname like '" + txtSearch.Text.TrimStart().TrimEnd().Trim() + "%'"; break;
}


case "کد پرسنلی":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.code like '" + txtSearch.Text + "%'"; break;
}
default: { break; }


}




OleDbConnection con = dalobj.SetConnection();
con.Open();
OleDbCommand command = new OleDbCommand();
command.CommandText = query;
command.Connection = con;
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dgArzyabi.DataSource = objDataTable;
}
catch { }
}
#endregion



با تغییر متن در تکست باکس جستجو یک ردیف از دیتاگرید select میشود
بعضی مقادیر سلولهای ردیف select شده درون چند تکست باکس ریخته می شوند به صورت زیر:



private void txtSearch_TextChanged(object sender, EventArgs e)
{
SearchPersonel();
txtLFname.Text = dgArzyabi.CurrentRow.Cells[2].Value.ToString() + " " +
dgArzyabi.CurrentRow.Cells[1].Value.ToString();
txtFAnameComtion.Text = dgArzyabi.CurrentRow.Cells[4].Value.ToString();
txtCodeComtion.Text = dgArzyabi.CurrentRow.Cells[3].Value.ToString();
txtDgComtion.Text = dgArzyabi.CurrentRow.Cells[6].Value.ToString();
txtsh.Text = dgArzyabi.CurrentRow.Cells[0].Value.ToString();
}


اما اگر کد پرسنلی وارد شده برای جستجو در دیتابیس یا دیتاگرید نباشد ارور زیر ایجاد میشود.
چرا؟

118611

parvizwpf
یک شنبه 14 اردیبهشت 1393, 00:24 صبح
خب جواب رو خودتون گفتید: آیتمی در گرید شما یافت نمیشه که میخواهید مفدار سل دومش و یکمش رو بگیرید. شرطی بعد از searchPersoanal بزارید مبنی بر پر بودن گرید.

mehrdad.ghorbaniyan
یک شنبه 14 اردیبهشت 1393, 08:16 صبح
سلام.خب برای اینکه رکوردی نیست که سلول 1 و... را بریزه داخل تکست باکس ها.
یه شرط بذار اگه تعداد رکوردها بالاتر از 1 بود این کارو کنه :

SearchPersonel();
if (dgArzyabi.RowCount > 0)
{
txtLFname.Text = dgArzyabi.CurrentRow.Cells[2].Value.ToString() + " " +
dgArzyabi.CurrentRow.Cells[1].Value.ToString();
txtFAnameComtion.Text = dgArzyabi.CurrentRow.Cells[4].Value.ToString();
txtCodeComtion.Text = dgArzyabi.CurrentRow.Cells[3].Value.ToString();
txtDgComtion.Text = dgArzyabi.CurrentRow.Cells[6].Value.ToString();
txtsh.Text = dgArzyabi.CurrentRow.Cells[0].Value.ToString();
}