PDA

View Full Version : چــــــــــــک باکس در دیتاگرید



farhan1
چهارشنبه 21 فروردین 1392, 15:21 عصر
سلام
در داخل جدول 4 تا فیلد دارم که بانکم sql است که 2 تا از این فیلدها به صورت bit تعریف شده اندو به صورت پیش فرض false می باشد.در داخل فرمم یک دیتاگرید دارم که بایند کردم به بانک که در دیتاگرید این 2 تا فیلد به صورت چک باکس است حال می خواهم زما نی که چک باکس به صورت checked است مقدار فیلد در جدول به
true تبدیل شود.برنامه به زبان سی شارپ با ado است. خواهشا کمک کنید.

در ضمن در دیتا گریدم بیش از 30 رکورد است

hesam_dj10
چهارشنبه 21 فروردین 1392, 16:07 عصر
ببین فقط کافیه در رویداد چک بنویسی
که وقتی تیک خورد برده با دستور update اون سطر جاری رو update کنه البته با استفاده از کلید اصلیت
البته فقط اون فیلد مورد نظرت
برای پیدا فیلدی که روش کلیک شده از دستور زیر استفاده کن

dataGridView1.CurrentRow.Cells[0].Value
امید وارم متوجه شده باشید
ویژوال استودیو ندارم که کد بهت بدم

farhan1
چهارشنبه 21 فروردین 1392, 16:46 عصر
حسام جان متوجه نشدم دقیقتر بگید

hesam_dj10
چهارشنبه 21 فروردین 1392, 17:38 عصر
ببین تو یه datagrid view داری
و روی یه سطر کلیک میکنی
میتونی آدرس اون سطر رو اینجوری پیدا کنی
dataGridView1.CurrentRow.Cells[0].Value
البته اون صفره اولین خانه datagridview تو است
که مثلا اگه اون فیلدی که میگی به صورت بیت ذخیره شده ی چهارمین فیلدت باشه صفر میشه 3
خوب
حالا مثلا ایک کد رو مینویسیم
a=dataGridView1.CurrentRow.Cells[0].Value
if (a=="false" || a==0)
{

//دستور اپدیت sql


}
با دستورات sql که اشنایی داری؟؟
تمامش این بود
ببخشید ویژوال استودیو ندارم
وگر نه کاملتر میگفتم
دوستانی که بلدن کمک کنن
اوخ نمیشن ها!!!!!!

farhan1
چهارشنبه 21 فروردین 1392, 17:49 عصر
دوتا فیلد دارم که بعضی موقع دوتا فیلد چک بشه یا اینکه یکیشون

hesam_dj10
چهارشنبه 21 فروردین 1392, 17:53 عصر
متوجه نشدم!!:متفکر:

farhan1
چهارشنبه 21 فروردین 1392, 17:53 عصر
102609102608

farhan1
چهارشنبه 21 فروردین 1392, 17:55 عصر
عکس فرستادم

farhan1
چهارشنبه 21 فروردین 1392, 17:57 عصر
فیلد نمایش و ویرایش با چک شدن در بانک TRUE شود. یا اینکه نمایش TRUE شود و یا ویرایش TRUE شود

farhan1
چهارشنبه 21 فروردین 1392, 18:00 عصر
:متفکر:حسام جان متوجه شدی

hesam_dj10
چهارشنبه 21 فروردین 1392, 18:01 عصر
فرقی نمیکنه این هم مثل همون توضیح بالاست
یعنی کسی پیدا نمیشه به بنده خدا کمک کنه
کسایی هم که میخوان کمک کنن نرم افزار ندارن !!!!
لطفا مدیران فروم کمک کنن (البته به مشکل منم رسیدگی بشه!!!!)

farhan1
چهارشنبه 21 فروردین 1392, 18:37 عصر
کسی نیست کمـــــــــــــــــــــــ ـــــــــــــــــــــــــ ک کنه

farhan1
چهارشنبه 21 فروردین 1392, 20:28 عصر
:متفکر:کسی نیست کمک کنههههههههههههههههههههههه ههههههههههههههههههههههههه ههه

khokhan
چهارشنبه 21 فروردین 1392, 21:04 عصر
:متفکر:کسی نیست کمک کنههههههههههههههههههههههه ههههههههههههههههههههههههه ههه

با سلام

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

در این نمونه دیتا گرید به sql متصل شده و ستون orignal1 بانک sql از نوع bit می باشد ودر گرید به صورت چک باس نشان داده می شود
حالا کافیه چک باس رو تیک بزنی و در پاسخ پیغام جواب بله بدین تا دیتابیس آپدیت بشه و مقدار پیشفرض ستون جدول مقدار true بگیره:لبخند:

شاد شاد

farhan1
پنج شنبه 22 فروردین 1392, 18:07 عصر
این کدی که من نوشتم با یک کلیک کردن بر روی چک باکس کل فیلدها ی ردیف فوق در جدول به صورت true می شود

amir_pro
پنج شنبه 22 فروردین 1392, 21:22 عصر
ببین تو رویداد cellclick بنویس if e.columnindex=ColumnNumber که columncnumber شماره ستون چک باکست هست اون وقت میتونی خیلی راحت اطلاعات سطر مربوطه که روی دکمه ویرایشش کلیک شده رو ویرایش کنی

farhan1
جمعه 23 فروردین 1392, 09:30 صبح
102683

کدی که گفتید نوشتم ولی این ارور را میده
خواهشا یکی کمک کنههههههههههههههههههههههه ههههههههههههههههههههههه

farhan1
جمعه 23 فروردین 1392, 09:34 صبح
تو را خدا یکی اساسی به من کمک کنه خواهش می کنم دارم دیونه میشم

farhan1
جمعه 23 فروردین 1392, 09:43 صبح
102684

به محض اینکه اولین رکورد در دیتاگرید چک بشه
این کد کل فیلدها را در بانک true میکنه

farhan1
جمعه 23 فروردین 1392, 10:37 صبح
کمککککککککککککککککککککککک ککککککککککککککککککککککککک کک

farhan1
جمعه 23 فروردین 1392, 11:02 صبح
کسی نیست کمک کنه

aslan
جمعه 23 فروردین 1392, 14:53 عصر
سلام
ببینید دوست عزیز
شما باید در جدولتون یم فیلد منحصر بفرد برای هر سطر ( رکورد ) داشته باشین . ظاهرا فعلا تو جدولتون این فیلد را ندارید. در صورتیکه امکان ایجاد فیلد براتون نیست و از هر کدوم از کد فرمها برای هر کاربر فقط یکی وجود دارد ( یعنی برای کاربر با شناسه 7 فقط یک فرم با شناسه 1 و 2 وجود دارد - یعنی کد فرم برای هر نفر منحصر بفرد میباشد ) ترکیب شناسه کاربری و کد فرم را میتوانید بجای شناسه رکرورد بکار بگیرین و در انتهای دستو ر Update ازش استفاده کنید مثلا به اینصورت :


Update Dastrasi Set WriteFrm=@writefrm,ReadFrm=@readfrm Where UserName=@username AND FrmCod=@frmcod
لازم است که پارامترهای مربوط به Username و FrmCod را هم تنظیم کنید
موفق باشید

farhan1
جمعه 23 فروردین 1392, 15:19 عصر
در جدول چیزی تغییر نمیکنه

aslan
جمعه 23 فروردین 1392, 17:13 عصر
سلام یک پروژه کوچک براتون آماده کردم که میتونید از کدهای مربوط به عملیات دیتاگریدش استفاده کنید
من sql2000 روی سیستمم داشتم که نوع فیلد writefrm , readfrm از نوع bit با دیفالت (0) lمیباشد
تصویر فیلدهای بانک اطلاعاتی ضمیمه شده است
کدهای مربوط به بازکردن بانک و نحوه دسترسی و ...... بصورت خیلی ساده نوشته شده و زیاد اصولی نیست که باید بر اساس نیاز خودتون اصلاح کنید
.........
موفق باشید

102698
102699

در ضمن میتونین Button موجود در هر ردیف گرید را حذف کنید و با یک button در خارج از گرید کل تغییرات را ( برا ی همه ردیف ها ) با اعمال تغییراتی در کد یکجا اعمال کنید و .........................

farhan1
جمعه 23 فروردین 1392, 19:21 عصر
من یک BUTTON خارج از گزید تعریف کردم در ضمن کدی که شما نوشتید در CELL CLICK است

khokhan
جمعه 23 فروردین 1392, 20:28 عصر
من یک BUTTON خارج از گزید تعریف کردم در ضمن کدی که شما نوشتید در CELL CLICK است

با سلام

عزیز اگه می شه نمونه کوچکی از اون چه می خواین رو فوری درس کنین بگذارین بررسی کنیم

ما چه نمی دونیم درون برنامه جه اتفاقی می افته

با اون تکه کدی هم که گذاشتی نمی شه چیزی فهمید یا گفت

به قول آقا تقی " کس نداند پس پرده چه افتاد "

aslan
جمعه 23 فروردین 1392, 21:39 عصر
سلام
کد ضمیمه گرید را ردیف به ردیف میخونه و آپدیت میکنه .
کدها باید بهینه شود
ا.......


private void btnUpdateAll_Click(object sender, EventArgs e)
{
try
{
con.ConnectionString = strCon;
con.Open();
int rowUpdate = 0;
for (int i = 0; i < dgvdastrasi.Rows.Count - 1; i++)
{
if (!string.IsNullOrEmpty(dgvdastrasi.Rows[i].Cells["username"].Value.ToString()) &&
!string.IsNullOrEmpty(dgvdastrasi.Rows[i].Cells["frmcod"].Value.ToString()))
{
string strSQL = "Update Dastrasi Set Writefrm=@writefrm,Readfrm=@readfrm Where Username=@username AND Frmcod=@frmcod";

cmd = new SqlCommand(strSQL, con);
cmd.Parameters.AddWithValue("@writefrm", Convert.ToBoolean(dgvdastrasi.Rows[i].Cells["writefrm"].Value));
cmd.Parameters.AddWithValue("@readfrm", Convert.ToBoolean(dgvdastrasi.Rows[i].Cells["readfrm"].Value));
cmd.Parameters.AddWithValue("@username", dgvdastrasi.Rows[i].Cells["username"].Value.ToString());
cmd.Parameters.AddWithValue("@frmcod", dgvdastrasi.Rows[i].Cells["frmcod"].Value.ToString());
cmd.ExecuteNonQuery();
rowUpdate++;
}
}
MessageBox.Show(" Update " + rowUpdate.ToString() + " Records ");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error");
}
finally
{
con.Close();
con.Dispose();
cmd.Dispose();
cmd = null;
}

}

موفق باشید .

farhan1
جمعه 23 فروردین 1392, 22:41 عصر
این error میده102718

farhan1
جمعه 23 فروردین 1392, 22:44 عصر
در ضمن در load form برنامه به این شکل تعریف کردم


dgvdastrasi.Columns[0].HeaderText =
"شناسه کاربری";

dgvdastrasi.Columns[0].Width = 120;

dgvdastrasi.Columns[1].HeaderText =

"کد فرم";

dgvdastrasi.Columns[1].Width = 50;



//dgvdastrasi.Columns[1].Visible=false;

dgvdastrasi.Columns[2].HeaderText =

"نام فرم";

dgvdastrasi.Columns[2].Width = 120;

dgvdastrasi.Columns[2].ReadOnly =

true;

dgvdastrasi.Columns[3].HeaderText =

"نمایش";

dgvdastrasi.Columns[3].Width = 40;

dgvdastrasi.Columns[3].Name =

"readfrm";

dgvdastrasi.Columns[4].HeaderText =

"ویرایش";

dgvdastrasi.Columns[4].Width = 45;

dgvdastrasi.Columns[4].Name =

"writefrm";

farhan1
جمعه 23 فروردین 1392, 22:56 عصر
کد فوق error بالا را میده102720

aslan
جمعه 23 فروردین 1392, 23:16 عصر
سلام
از این تصویر که متن خطا مشخص نیست
میتونین try catch و حذف کنین تا متن خطا دقیق مشخص بشه
من از کدی که براتون گذاشتم استفاده کردم و جواب گرفتم
احتمالا خطا روی کد باز کردن کانکشن هستش ( یعنی قبلا باز شده و سعی میکنین دوباره بازش کنین ) اول چک کنین ببینین اگر باز نبود اون کد را بنویسین (con را open کنین ) و .............

farhan1
جمعه 23 فروردین 1392, 23:46 عصر
102722

برداشتم این ارور میده

khokhan
جمعه 23 فروردین 1392, 23:53 عصر
سلام

نمونه قبلی رو اصلاح کردم و کدهارو داخل رویداد کلیک باتن قرار دادم

و این هم نمونه جدید با دوتا ستون چک باکس و دکمه ثبت :لبخند:

aslan
شنبه 24 فروردین 1392, 00:02 صبح
سلام
کدهاتون را مثل من بنویسین لطفا :

cmd = new SqlCommand(strSQL, con);
را داخل حلقه for قرار بدین
اضافه کردن پارامتر نام فرم هم اضافی است . حذف کنید
در صورت وجود اشکال متن خطا را اینجا قرار دهید

farhan1
شنبه 24 فروردین 1392, 14:10 عصر
برنامه درست شد واقعا از لطف همه کسانی که کمکم کردند بسیار ممنونم انشالله هر آرزویی دارید بهش برسید