PDA

View Full Version : سوال: غیر فعال کردن ستون datagridview



titipop1
سه شنبه 20 مرداد 1394, 23:35 عصر
درود دوستان
میخوام ستونی از گریدویو رو غیر فعال کنم البته با یه شرط از دستور زیر استفاده کردم جواب نمیده ممنون از راهنماییتون

if (dataGridView3.Rows[e.RowIndex].Cells[4].Value="دارد")
{
dataGridView3.Rows[e.RowIndex].Cells[5].ReadOnly = true;
dataGridView3.Rows[e.RowIndex].Cells[6].ReadOnly = true;
}

ژیار رحیمی
چهارشنبه 21 مرداد 1394, 01:35 صبح
دستوراتی که نوشتی اشاره به سلول های گرید دارد شما میخوای ستونی رو غیر فعال کنی نه یه سلول

dataGridView3.Columns[5].ReadOnly = true;

titipop1
چهارشنبه 21 مرداد 1394, 10:23 صبح
دستوراتی که نوشتی اشاره به سلول های گرید دارد شما میخوای ستونی رو غیر فعال کنی نه یه سلول

dataGridView3.Columns[5].ReadOnly = true;

مهندس با دستور شما هم جواب نداد

بیتا حکمت
چهارشنبه 21 مرداد 1394, 10:34 صبح
سلام ، کد اقای zagroti (http://barnamenevis.org/member.php?48557-zagroti) جواب می ده الان تست کردم ، جسارتا" شاید شما ستون ها رو به جای صفر از یک شمردین ، در واقع کد بالا ستون ششم رو غیرفعال می کنه

titipop1
چهارشنبه 21 مرداد 1394, 13:19 عصر
سلام ، کد اقای zagroti (http://barnamenevis.org/member.php?48557-zagroti) جواب می ده الان تست کردم ، جسارتا" شاید شما ستون ها رو به جای صفر از یک شمردین ، در واقع کد بالا ستون ششم رو غیرفعال می کنه
منم از صفر گرفتم بیتا حانم شما این کد رو روی کدوم event نوشتین من روی cellvaluechange نوشتم البته حدسم اینه که مشگل از if باشه

بیتا حکمت
چهارشنبه 21 مرداد 1394, 17:33 عصر
منم از صفر گرفتم بیتا حانم شما این کد رو روی کدوم event نوشتین من روی cellvaluechange نوشتم البته حدسم اینه که مشگل از if باشه

من تو لود فرم نوشتم

private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowCount = 8;
dataGridView1.ColumnCount = 8;
dataGridView1.Columns[5].ReadOnly = true;
}

Mahmoud.Afrad
چهارشنبه 21 مرداد 1394, 18:59 عصر
در شرط برای چک کردن برابری باید از عملگر == استفاده کنی ( = عملگر انتساب هست)

titipop1
چهارشنبه 21 مرداد 1394, 21:08 عصر
در شرط برای چک کردن برابری باید از عملگر == استفاده کنی ( = عملگر انتساب هست)
مهندس شرط == رعایت شده ولی جواب نمیده کد روی باتن جواب میده ولی توی این حالت ن
مرسی
دوستان گلم میخوام یه توضیح کامل بدم طبق تصویر که مبینید میخوام اگه کارگر غیبت داشت ستونهای کارکرد و اضافه کار به قولی قفل بشن البته بعد از زدن دکمه ثبت
ممنون از کمک همه دوستان

ژیار رحیمی
چهارشنبه 21 مرداد 1394, 23:29 عصر
شما از اول این موضوع رو به این شیوه مطرح میکردی بهتر بود .الان غیر فعال کردن یه ستون به کار شما نمیایید.آنچه شما لازم داری بر اساس یه شرط در سطرهای گرید یه سری سلول هارو در صورت داشتن شرط غیر فعال کنه.کد زیر براساس تصویر بالا نوشته شد

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
if(e.RowIndex<0)return;
if (e.ColumnIndex == 7)//ایندکس ستون دکمه
{
if (dataGridView1.CurrentRow != null &&
dataGridView1.CurrentRow.Cells[4].Value.ToString() == string.Empty)//ستون غیبت
{
dataGridView1.CurrentRow.Cells[5].ReadOnly = true;//ستون کارکرد
dataGridView1.CurrentRow.Cells[6].ReadOnly = true;//ستون اضافه کار
}
}
}

titipop1
پنج شنبه 22 مرداد 1394, 00:42 صبح
شما از اول این موضوع رو به این شیوه مطرح میکردی بهتر بود .الان غیر فعال کردن یه ستون به کار شما نمیایید.آنچه شما لازم داری بر اساس یه شرط در سطرهای گرید یه سری سلول هارو در صورت داشتن شرط غیر فعال کنه.کد زیر براساس تصویر بالا نوشته شد

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
if(e.RowIndex<0)return;
if (e.ColumnIndex == 7)//ایندکس ستون دکمه
{
if (dataGridView1.CurrentRow != null &&
dataGridView1.CurrentRow.Cells[4].Value.ToString() == string.Empty)//ستون غیبت
{
dataGridView1.CurrentRow.Cells[5].ReadOnly = true;//ستون کارکرد
dataGridView1.CurrentRow.Cells[6].ReadOnly = true;//ستون اضافه کار


}
}
}



مهندس جان متاسفانه جواب نمیده بعد از مقدار گرفتن ستون غیبت دوتا ستون بعدی مقدار میگیرن

golbafan
پنج شنبه 22 مرداد 1394, 00:54 صبح
سلام کدی رو که آقای زاگروتی در CellClick نوشتن رو باید در متد CellValueChanged و یا CellEndEdit اجرا کنید

titipop1
پنج شنبه 22 مرداد 1394, 00:58 صبح
مهندس جان آخه واسه اون خط (e.Columnsindex)if باید توی Cellclick باشه

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:01 صبح
سلام درسته .من کدرو تست کردم مشکلی نداره وقتی روی دکمه سطر کلیک شود اونوقت کدها بررسی میشود

golbafan
پنج شنبه 22 مرداد 1394, 01:03 صبح
مهندس جان آخه واسه اون خط (e.Columnsindex)if باید توی Cellclick باشه

متدی که گفتم رو انجام بدید.
e.Columnsindex رو هم داره:

private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)

باید وقتی خانه مربوط به غیبت رو تغییر میدید این کار رو بکنید و اون دکمه رو هم نیاز ندارید

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:04 صبح
اگر دو کامبو باکس مقدار میگیره مشکل از پیاده سازی ستون های از نوع ComboBox هست ربطی به کد بالا نداره

titipop1
پنج شنبه 22 مرداد 1394, 01:06 صبح
مهندس جان با عرض پوزش ستون غیبت من دوتا مقدار میگیره "دارد" و "ندارد" که البته بنده به جای string.Empty جایگذاری کردم ولی خطای خالی بودن ستون غیبت رو میده البته به حرف مهندس golbafan توی رویداد cellvaluechange قرار دادم

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:11 صبح
شما واسه هر سطر از دیتاگرید به دکمه گذاشتی پس بهتره در رویداد CellClick بنویسی که بهتره. ولی دوستمون رویداد CellValueChangedپیشنهاد دادن که به نظر من چون شما از دکمه استفاده کردی و سیاست کاری که گفتی بعد از اینکه روی دکمه سطر کلیک کرد ستون غیبت چک بعد دو ستون اضافه کاری و .. غیر فعال شود پس بهتره از CellClick استفاده شود

titipop1
پنج شنبه 22 مرداد 1394, 01:14 صبح
چشم مهندس بذارید من کد ها رو انتقال بدم عرض میکنم خدمتتون

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:14 صبح
امکانش هست نمونه پروژه کوچک از این بخش رو بزار من تست کنم. چون من کدی که گذاشتم کار میکنه

titipop1
پنج شنبه 22 مرداد 1394, 01:18 صبح
مهندس جان جواب نمیده البته بگم که من فقط یه سطر دارم توی گرید در واقع توسط کمبو اسامی کارگر اونا رو یکی یکی حضور و غیاب میکنم بازم میگم فقط یه سطر دارم

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:22 صبح
خب میدونی روش داره اذیتت میکنه بهتره روش پیاده سازی دیگه ایی جایگزین کن که این همه دردسر رو نداشته باشی.شما بهتره از دیتاگرید جهت افزودن یا ویرایش استفاده نکنی

titipop1
پنج شنبه 22 مرداد 1394, 01:22 صبح
کد من رو لطفا ببینید

titipop1
پنج شنبه 22 مرداد 1394, 01:27 صبح
مهندس منظورتون اینه که از تکست باکس استفاده کنم؟

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:28 صبح
با این اوصاف شما بار بار کلیک تغییرات رو تو دیتابیس ذخیره میکنی.دوست گرامی اون قسمت کدی که شما اضافه کردی رو به داخل if بالا سریش(زیر دو خط کد واسه Readonly کردن) ببر

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:33 صبح
آره این روش کار کردن دردسر زیاد داره.به نظر من بهتره شما یه فرم و کنترل های لازم جهت پیاده سازی بخش افزودن و همچنین تو همین فرم هم میتونی بخش ویرایش اطلاعات رو داشته باشی استفاده کن که دردسرشم کمتره.لازم به توضیح که این روش هم جواب میده ولی دردسر پیاده سازی خاص خودشو داره

titipop1
پنج شنبه 22 مرداد 1394, 01:34 صبح
مهندس بهتر شد ولی یکی ثبت میکنه بعد واسه بعدی عمل میکنه

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:44 صبح
باز تکرار میکنم شما داری به جای چند TextBox و ComboBox که به سادگی کارتو را میندازه از یه سطر فقظ و فقط یه سطر از DataGrid استفاده میکنی که کاملا اشتباه است.شما بهتره وقتی داری ازین روش پیاده سازی(روش گرید) استفاده میکنی در پایان دستورات ذخیره سازی سطر جاری رو خالی نکنی و یه سطر دیگه(به وسیله کد) به گرید اضافه کنی برای درج رکورد بعدی

titipop1
پنج شنبه 22 مرداد 1394, 01:49 صبح
حقیقتش مهندس این روش یه کم حرفه ای تره مطمئنم متوجه هستین چی میگم دوست دارم این روش باشه

ژیار رحیمی
پنج شنبه 22 مرداد 1394, 01:57 صبح
وقتی حرفه تره که شما تجربه کافی برای کارکردن با datagrid داشته باشی بیشتر property ها و eventهای گرید رو بشناسی و کار کرده باشی.الان من از شما یه سوال دارم جهت ویراش یه رکورد می خوای چه جوری پیاده سازی کنی(در روش گرید خودتون) ؟

titipop1
پنج شنبه 22 مرداد 1394, 01:59 صبح
خوب اینا توی یه گرید دیگه ذخیره میشن بعد از همون گرید قابل ویرایش هستن

titipop1
پنج شنبه 22 مرداد 1394, 02:14 صبح
مهندس اگه بحث لاک کردن اون دو ستون نباشه جواب میده گفتم با این کار بهتر میشه ناچارا باید بیخیال لاک کردن اون دو ستون بشم

titipop1
پنج شنبه 22 مرداد 1394, 02:17 صبح
مهندس جان کمال تشکر رو دارم واقعا لطف کردین لبتون خندون و تنتون سالم خدا خیرتون بده
شب حوش
یا علی