PDA

View Full Version : خطای Object reference not set to an instance of an object ( مورد خاص )



emilvr
دوشنبه 13 شهریور 1391, 14:42 عصر
سلام

قصد دارم با جستجوی فیلد کلید جدول، سایر مقادیر دیتاگرید رو وارد تکس باکس های فرم برنامه بکنم.

این اتفاق میفته اما مشکل اینجاست که وقتی برای بار اول روی دکمه جستجو کلیک می کنم این پیغام خطا میاد :


Object reference not set to an instance of an object

اما وقتی برای بار دوم روی دکمه جستجو کلیک می کنم مقادیر مربوطه بدون مشکل وارد تکس باکس های فرم میشه.

سوال من اینجاست چرا وقتی بار اول روی دکمه جستجو کلیک می کنم اون پیغام میاد؟

این کدی هستش که من برای جستجو و وارد کردن مقادیر دیتاگرید در تکس باکس ها استفاده کردم :




string sqlcommand;

try
{
if (bcodeTxt.Text != "")
{

sqlcommand = "SELECT * FROM bookTbl WHERE bookCode='" + bcodeTxt.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(sqlcommand, con);
da.Fill(ds, "bookTbl");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "bookTbl";



if (ds.Tables["bookTbl"].Rows.Count > 0)
{

bnameTxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["bookCode"].Value);
moalefTxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["moalef"].Value);
subjectTxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["janerBook"].Value);
pyearTxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["publishYear"].Value);
publishmentTxt.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["publishment"].Value);
pturnTxt.Text=Convert.ToString(dataGridView1.Curre ntRow.Cells["publishTurn"].Value);
amountTxt.Text=Convert.ToString(dataGridView1.Curr entRow.Cells["amount"].Value);
tozihatTxt.Text=Convert.ToString(dataGridView1.Cur rentRow.Cells["tozihat"].Value);
}
else
{
MessageBox.Show("کتابی با این شماره ثبت نشده است");
}
}
else
{
MessageBox.Show("لطفا شماره کتاب را وارد نمایید");
}

sgn2006
دوشنبه 13 شهریور 1391, 16:39 عصر
سلام ، کدت به نظر مشکلی نداره بهترین کار Break Point بزاری و خط به خط اجرا کنی ببینی چه مشکلی داره ...

hamidkh
دوشنبه 13 شهریور 1391, 16:51 عصر
سلام
شما چرا اطلاعات رو اول از میریزین تو دیتا گرید بعد دوباره از دیتا گرید میخونید میریزین توی تکست باکس؟ خب مستقیم از دیتا بیس که گرفتین بریزین توی تکست باکس.
ببینید احتمالا مشکل currentrow باشه. اول یه پیغام بدیین ببینین وجود داره

kurd_programming
دوشنبه 13 شهریور 1391, 17:24 عصر
دوست عزیز از دیتابیس ببین یه فیلدی رو جاگذاشتی یا نه ... چون این اررور بیشتر برای وقتهایی هست که تعداد فیلدهات با تعداد اطلاعاتی که وارد می کنی کمتر باشه این پیغام رو میده.. خوب بررسی کن

emilvr
دوشنبه 13 شهریور 1391, 18:37 عصر
سلام
شما چرا اطلاعات رو اول از میریزین تو دیتا گرید بعد دوباره از دیتا گرید میخونید میریزین توی تکست باکس؟ خب مستقیم از دیتا بیس که گرفتین بریزین توی تکست باکس.
ببینید احتمالا مشکل currentrow باشه. اول یه پیغام بدیین ببینین وجود داره
من از طریق LINQ مستقیم گرفتم اما اونطور که می خواستم نشد. شما روش بهتری برای ارسال مستقیم مقادیر دیتا بیس به تکس باکس سراغ دارین؟

emilvr
دوشنبه 13 شهریور 1391, 18:39 عصر
دوست عزیز از دیتابیس ببین یه فیلدی رو جاگذاشتی یا نه ... چون این اررور بیشتر برای وقتهایی هست که تعداد فیلدهات با تعداد اطلاعاتی که وارد می کنی کمتر باشه این پیغام رو میده.. خوب بررسی کن
چک کردم، ردیف های جدول مشکلی نداشت.

جالبش اینه فقط بار اول اون پیغا خطا میاد، بار دوم جواب میده و اطلاعات وارد تکس باکس ها میشن

kurd_programming
دوشنبه 13 شهریور 1391, 20:40 عصر
چک کردم، ردیف های جدول مشکلی نداشت.

جالبش اینه فقط بار اول اون پیغا خطا میاد، بار دوم جواب میده و اطلاعات وارد تکس باکس ها میشن
دروود .
اگه اینطوری یا سیستم شما ویروسی هستش یا اینکه VS.net شما مشکل داره ... چون من هم همچین مشکلی واسم پیش اومد چند هفته درگیرش شدم که آخر سر سیستمم ویرووسی بود
واسه همین گفتم

emilvr
سه شنبه 14 شهریور 1391, 14:20 عصر
دروود .
اگه اینطوری یا سیستم شما ویروسی هستش یا اینکه VS.net شما مشکل داره ... چون من هم همچین مشکلی واسم پیش اومد چند هفته درگیرش شدم که آخر سر سیستمم ویرووسی بود
واسه همین گفتم
نه آقا ویروسی چیه، سیستم من آنتی ویروس و فایروال ارجینال داره که هر روز آپدیت میشه.

مشکل از چیز دیگه ای بود. دیتا گرید رو از طریق کدنویسی ساختم و مشکل حل شد. هرچند هنوز علتش عجیب و غیر منطقیه.

va2012
سه شنبه 14 شهریور 1391, 14:53 عصر
با سلام.

عزیز این Error اغلب به خاطر عدم تشخیص میان دو کنترل مشابه است. مثلا وقتی شما قصد دارین روی اطلاعات یک دیتاگرید ویو که وجود نداره (مقدارش Null هست) کار کنید و از این قبیل مشکلات.

برای راه حل هم اول بیایید با استفاده از یک If و کدهای زیر از Null نبودن - کدهایی که در اجرا مقدار Null برمیگردانند - مطمئن بشید و بعد سایر کدهای اصلی رو در قسمت Else قرار بدین.

مثلا این کد : در این نمونه اول از Null نبودن کدی که خطا برای آن اتفاق افتاده مطمئن میشیم ودر غیر اینصورت کدهای اصلی اجرا میشوند.


if ((tabControl1.SelectedPage.Controls[0] as DataGridView) != null)
{
labelX7.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[0].Value.ToString();
textBox1.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[1].Value.ToString();
comboBox1.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[2].Value.ToString();
faDatePicker1.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[3].Value.ToString();
textBox2.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[4].Value.ToString();
textBox3.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[5].Value.ToString();
textBox4.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[6].Value.ToString();
comboBox2.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[7].Value.ToString();
textBox5.Text = (tabControl1.SelectedPage.Controls[0] as DataGridView).CurrentRow.Cells[8].Value.ToString();
}

kurd_programming
چهارشنبه 15 شهریور 1391, 11:32 صبح
دروود به همه دوستان ...
من وقتی که می خوام یک کارمند رو داخل دیتا بیس خودم ثبت کنم همنون خطای incorrect near syntex '@a9 ' از می گیره دوستان کمکم کنید ممنون میشم چون مربوط میشه به پروژه پایان ترم

private void radButton1_Click(object sender, EventArgs e)
{
SqlDataAdapter adp1 = new SqlDataAdapter("Select personelid from personel", logform.con);
DataSet dst1 = new DataSet();
DataView dtv1 = new DataView();
adp1.Fill(dst1,"personel");
dtv1 = dst1.Tables["personel"].DefaultView;
dtv1.Sort = "personelid";
if (dtv1.Find(txtcodek.Text) < 0)
{
if ((txtadd.Text != "") && (txtchild.Text != "") && (txtcodek.Text != "") && (txtdatev.Text != "") && (txtname.Text != "") && (txtpricek.Text != "") && (txttell.Text != ""))
{
logform.con.Open();
SqlCommand com1 = new SqlCommand("insert into personel (personelname,personelid,dateenter,address,tel,dat eburn,type,numberchild,priceworkfix)Values(@a1,@a2 ,@a3,@a4,@a5,@a6,@a7,@a8,@a9", logform.con);
com1.Parameters.AddWithValue("@a1", txtname.Text);
com1.Parameters.AddWithValue("@a2", Convert.ToInt32(txtcodek.Text));
com1.Parameters.AddWithValue("@a3", Convert.ToDateTime(txtdatev.Text));
com1.Parameters.AddWithValue("@a4", txtadd.Text);
com1.Parameters.AddWithValue("@a5", Convert.ToInt64(txttell.Text));
com1.Parameters.AddWithValue("@a6", Convert.ToDateTime(txtdateb.Text));
com1.Parameters.AddWithValue("@a7", Convert.ToString(radDropDownList1.SelectedItem));
com1.Parameters.AddWithValue("@a8", Convert.ToInt32(txtchild.Text));
com1.Parameters.AddWithValue("@a9", Convert.ToInt32(txtpricek.Text));
com1.ExecuteNonQuery();
logform.con.Close();
txtadd.Text = "";
txtchild.Text = "";
txtcodek.Text = "";
txtdatev.Text = "";
txtname.Text = "";
txtpricek.Text = "";
txttell.Text = "";
RadMessageIcon Icon = RadMessageIcon.Question;
RightToLeft rtl = new RightToLeft();
RadMessageBox.Show(this, "آیا شما مطمئن هستید که میخواهید کاربر را حذف کنید ؟", "اطمینان", MessageBoxButtons.YesNo, Icon, MessageBoxDefaultButton.Button1, rtl);
}
else
{
DialogResult msg1;
msg1 = MessageBox.Show("اطلاعات را کامل وارد کنید", "پیغام خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
DialogResult msg2;
msg2 = MessageBox.Show("کدکارمندی وارد شده تکراری می باشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtcodek.Text = "";
}