توی دیتاگرید اطلاعاتی هست یا نه؟
روی خط دوم یعنی{یک breakpoint بزار و بعد برنامه رو اجرا کن و روی هدر کلیک کن و با توقف برنامه، با F11 برنامه رو تریس کن و ببین روی چه خطی هطا داد میشه.
توی دیتاگرید اطلاعاتی هست یا نه؟
روی خط دوم یعنی{یک breakpoint بزار و بعد برنامه رو اجرا کن و روی هدر کلیک کن و با توقف برنامه، با F11 برنامه رو تریس کن و ببین روی چه خطی هطا داد میشه.
دیتاگرید با یه جدول پر می شه:
private void showDriverDataGridView()
{
DriverClass drv = new DriverClass();
dataGridView1.DataSource = drv.showDrivers();
changeDataGridViewHeaderTexts();
}
private void changeDataGridViewHeaderTexts()
{
dataGridView1.Columns[0].HeaderText = "شناسه";
dataGridView1.Columns[1].HeaderText = "نام";
dataGridView1.Columns[2].HeaderText = "سن";
dataGridView1.Columns[3].HeaderText = "تاهل";
dataGridView1.Columns[4].HeaderText = "کد ملی";
dataGridView1.Columns[5].HeaderText = "شماره پرسنلی";
dataGridView1.Columns[6].HeaderText = "استخدام";
dataGridView1.Columns[7].HeaderText = "تلفن";
dataGridView1.Columns[8].HeaderText = "موبایل";
dataGridView1.Columns[9].HeaderText = "آدرس";
dataGridView1.Columns[10].HeaderText = "نام اتوموبیل";
dataGridView1.Columns[11].HeaderText = "مدل اتوموبیل";
dataGridView1.Columns[12].HeaderText = "کارت سوخت";
dataGridView1.Columns[13].HeaderText = "پلاک اتوموبیل";
}
روی همون خط اول خطا داد
اگه از روش ado.net برای واکشی اطلاعات استفاده می کنی نیاز داری تا datamember گریدتم مقدار بدی
در کل این ارور واسه اینه که شما گریدت مقداری درونش نیست و می خواید تیتر هدراشو عوض کنید
موفق باشید
به جای ToString از convert استفاده کن.
txtName.Text = Convert.ToString(dataGridView1.CurrentRow.Cells[1].Value);
اینجا
txtName.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
پروژرو بزاری راحت تر می تونیم کمکت کنیم
هر جا value یک سلول ممکنه null باشه قبلش چک کن و اگر null بود تصمیم بگیر و یا از convert.tostring استفاده کن.
هر جا از currentrow استفاده کردی قبلش چک کن null نباشه. (پیغام خطاها به خاطر عدم رعایت همین موضوعه)
به جای اندیس از نام ستون استفاده کن تا اگر ستونها جابجا شدن نیاز نباشه اندیس ها رو تغییر بدی.
یه فکری به حال سطوح دسترسی بکن. مثلا در حال حاضر هر شخصی وارد برنامه بشه میتونه نام و رمز عبور دیگران رو ببینه و حتی تغییر بده.(معمولا این طور فرض میشه که ممکنه از یک برنامه روی یک کامپیوتر چند نفر استفاده کنند.).
کوئری های sql رو با استفاده از پارامتر بنویس. قبلا مثال زده شده جستجو کنید.
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow != null)
{
txtName.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userName"].Value);
txtAge.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userAge"].Value);
txtSabeghe.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userSabeghe"].Value);
txtCodeMelli.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userCodeMelli"].Value);
txtTel.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userTel"].Value);
txtMobile.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userMobile"].Value);
txtAddress.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userAddress"].Value);
txtPass.Text = Convert.ToString(dataGridView1.CurrentRow.Cells["userPass"].Value);
}
}
سلام.
من بصورت دستی به اول جدول خودم یک checkbox اضافه کردم.
می خوام با دستور زیر داده ها رو از دیتابیس حذف کنم اما با مشکل زیر مواجه میشم.
ممنون میشم راهنمایی کنید
http://upload7.ir/imgs/2014-03/96213435786093063772.png
این هم کد کامل
foreach (DataGridViewRow item in dgw2.Rows)
{
if ((bool)dgw2.CurrentRow.Cells[0].Value == true)
{
id = Convert.ToInt32(dgw2.CurrentRow.Cells[1].Value);
db.SPDeleteBook(id);
dgw2.DataSource = db.SPselect();
}
دارم با پروسیجر و entity داده رو حذف می کنم.
آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 08 فروردین 1393 در 17:32 عصر
foreach (DataGridViewRow row in dgw2.Rows)
{
if (Convert.ToBoolean(row.Cells[0].Value) == true && row.Cells[1].Value != null)
{
id = Convert.ToInt32(row.Cells[1].Value);
db.SPDeleteBook(id);
}
}
db.SaveChanges();
dgw2.DataSource = db.SPselect();
آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 08 فروردین 1393 در 17:36 عصر
سلام دوست عزیز
از عکسی که گذاشتید مشخصه که dgw2.CurrentRow.Cells[0] هیچ مقداری نداره و وقتی .value رو جهت گرفتن مقدار به کد اضافه میکنید داره ارور NullExeption بر میگردونه.
یه سوال ازتون داشتم اگه مقدارش True باشه هم این ارور رو میده؟ یعنی امتحان کردید ببنید اگه اولین Row مقدار Cell[0] v رو True بذارید به ارور میخورید یا نه؟
اگه وقتی True باشه ارور نده سعی کنید برای این فیلد یه مقدار default قرار بدید تا با این ارور روبرو نشید. یا قبل از این IF که ارور داره یه If دیگه قرار بدید جهت چک کردنه Null بودن dgw2.CurrentRow.Cells[0] و در صورت Null نبودن وارد if دوم بشه.
آخرین ویرایش به وسیله Mahmoud.Afrad : یک شنبه 10 فروردین 1393 در 00:12 صبح
ممنون دست عزیز.
بله چک کردم.
مثلا وقتی کد زیر رو به صورت زیر در میارم جواب می گیرم
foreach (DataGridViewRow item in dgw2.Rows)
{
if ((bool)dgw2.CurrentRow.Cells[0].Value == true)
{
label5.Text=dgw2.CurrentRow.Cells[1].Value.ToString();
}
}
این کد سالمه. اما وقتی از دستور حذف استفاده می کنم ارور میده!!!
جالب اینجاس که داده رو حذف می کنه اما ارور میده.
احساس می کنم if یا forech مشکل داشته باشه.
کسی نظری نداره؟
if (!string.IsNullOrEmpty(dgw2.CurrentRow.Cells[0].Value ))
{
id = Convert.ToInt32(dgw2.CurrentRow.Cells[1].Value);
db.SPDeleteBook(id);
dgw2.DataSource = db.SPselect();
}
دوست عزیز این نمی تونه string باشه.
اینجا ارور میده که داده bool یاید استفاده بشه نه string
چون سلول اول من چک باکس.
private void button1_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if ((bool)row.Cells[0].Value)
{
dataGridView1.Rows.Remove(row);
// کدهای مربوط به حذف
}
}
}
همچنین :
private void button1_Click(object sender, System.EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCheckBoxCell checkBox = row.Cells["check"] as DataGridViewCheckBoxCell;
if (checkBox != null && checkBox.Value != null && (bool)checkBox.Value)
{
//حذف ردیفهای انتخابی
}
}
}
ممنون دوست عزیز.
اما دستور اول که کار نکرد.
دستور دوم درست عمل کرد. اما فقط یه مشکل داره که فقط سلولی که آخرین دفعه انتخاب میشه رو حذف می کنه.
و بقیه سلول ها پاک نمی شه.
اینو امتحان کن :
private void btnDelete_Click(object sender, System.EventArgs e)
{
con.Open();
for (int x = dataGridView1.Rows.Count - 1; x >= 0; x--)
{
if ((bool)dataGridView1.Rows[x].Cells["checked"].Value == true)
{
da = new OleDbDataAdapter("Delete from list", con);
dataGridView1.Rows.Remove(dataGridView1.Rows[x]);
}
}
}
سلام.
چون من از entity استفاده می کنم. کد رو به صورت زیر تبدیل کردم.
اما این بار ارور داد.
و اینکه من اگه در شرط ها Cells["checked"] استفاده کنم ارور میده.
مجبورم جاب اون بزارم Cells[0].
اقا من فهمیدم مشکل از شرطمه.
من نباید currentrow رو چک کنم.
اما باید چی کار کنم؟؟!!
خسته شدم خدایی.
من فقط باید تمام سطر هایی که انتخاب میشه مقدار سلول شماره یک رو در بیارم.
کد بنده و khokhan چه مشکلی داره؟
Untitled.jpg
سلام خدمت مهندسین عزیز
کسی میدونه این ارور چه دلیلی داره؟
ممنون
با سلام
اگر اشتباه نکرده باشم خاصیت text اون کنترل تهی بوده است.
برای مطمئن شدن پیشنهاد می کنم که trace کنی.
با تشکر
ظاهرا اون شیئی که این رویداد را فرا می خونه null شده.
می تونی اون قسمت از کدتو که این رویداد را فراخونی می کنه نشون بدی.
یا
بگی برنامت دقیقا چه کاری را نشون میده.
باتشکر
با سلام
برای اینکه مطمئن بشی از تلریک هست
یک بار با کنترل های استاندارد ویژوال استودیو این کار رو انجام بده.
با تشکر
با سلام
شما کدام ورژن Telerik را استفاده می کنید؟
آیا این امکان و جود دارد که برنامتون را بزارید؟
با تشکر
سلام دوستان
من تو برنامم فرممو تا الان اجرا می کردم مشکلی نداشت الان خطای object reference not set to an instance of on object میده
کدمم هم همینه :
SooratJalaseh.Mahdoud.Majma maj = new SooratJalaseh.Mahdoud.Majma();
maj.Show();
با سلام
از طریق این کد کسی نمیتونه کمکی کنه. عملیات های قبل از لود شدن فرم رو باید دیباگ کنید.
ضمنا نام گذاریتون فوق العاده بده
با سلام
بنده برنامه ای آماده کرده ام که در سیستم مشتری خطای زیر را می دهد.
در صورتی که برنامه را بر روی سیستم خودم نصب میکنم خطا نمیدهد و بخوبی اجرا می شود.
See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at Lottery.Login.btnEnter_Click(Object sender, EventArgs e) in d:\myApp\Login.cs:line 42
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6400 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
Lottery
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Program%20Files%20(x86)/Lottery-Setup/Lottery.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6402 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6401 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6401 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Data
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6387 (Win8RTM.050727-6300)
CodeBase: file:///C:/Windows/assembly/GAC_64/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6411 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6411 (Win8RTMGDR.050727-6400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Transactions
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6387 (Win8RTM.050727-6300)
CodeBase: file:///C:/Windows/assembly/GAC_64/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.6387 (Win8RTM.050727-6300)
CodeBase: file:///C:/Windows/assembly/GAC_64/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
کد کلاس درون فایل Login.cs رو بزار
از این خط
if (newDataSet.Tables[0].Rows.Count > 0)
اتصال به بانک
this.objSqlConnection.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\db\Lottery.mdf;Integrated Security=True;User Instance=False";
در کامپیوتر خودم مشکلی نداره، برنامه رو نصب میکنم بخوبی اجرا میشه، اما در کامپیوتر دیگه هنگام اجرا و رسیدن به این خط که در واقع صحت ورودی را بر میگرداند خطا میدهد ....