PDA

View Full Version : مشکل در آپدیت کردن یک جدول از طریق DataGrid



darksunrise
چهارشنبه 23 اردیبهشت 1388, 19:44 عصر
سلام
مشکل من این هست که یه دیتا گرید دارم که از دوقسمت تشکیل شده . قسمت اول کاملا از دیتا بیس می آد و شامل فیلد هایی مثل نام و نام خانوادگی و مدرک تحصیلی و...
اما قسمت دوم یه ستون اضافه هست که بنا به دلایلی باید موقع runtime مقدار بگیره و از نوع چک باکس هست که از طریق کد زیر اضافه کردمش ( اگه غلط هست بگید)

dataGridView1.Columns.Add("clmn", "انتخاب");
حالا باید این مقدار دوباره به جدول ریخته بشه و یه جور هایی با جدول قبلی ترکیب بشه اما این کار انجام نمیشه در واقع فکر کنم refrenceاش رو مشخص نکردم . .جه جوری باید این کار رو بکنم؟
eror ای که میده هم این هست
object references not set to instance of an object

hsmfaridmehr
چهارشنبه 23 اردیبهشت 1388, 20:25 عصر
اگه بشه کدی که نوشتی رو بذاری بهتر میشه جواب داد

darksunrise
چهارشنبه 23 اردیبهشت 1388, 21:33 عصر
راستش کد خاصی ننوشتم کد من همون کد selectمعمولی هست که توی رویداد load برنامه گذاشتم و قسمت دوم هم یه insert ساده هست که داخل رویداد کلیک از data grideگذاشتم منتها مشکل این هست که اون ستون اول که من جدا از طریق کد بالا به دیتا گرید اضافه کردم نمی دونم چه جوری به جدول ربط بدم یعنی reference نداره
یک بار هم از طریق properties مربوط به دیتا گرید رفتم که باز هم حل نشد یعنی از columns یه ستون add کردم
الان شما اگه بخوای اطلاعات یه چک باکس رو از این طریق انتقال بدی چی کار میکنید؟
لطفا کمک کنید خیلی ضروری هست

hsmfaridmehr
چهارشنبه 23 اردیبهشت 1388, 21:40 عصر
شما در اصل میخواین ی ستون به جدولتون اضافه کنید یا فقط به DataGridView؟

darksunrise
چهارشنبه 23 اردیبهشت 1388, 21:46 عصر
نه دیگه این مقدار باید به جدول هم انتقال پیدا کنه . اما چون از نوع چک باکس بود ستون اول رو جدا تعریف کردم یعنی از طریق کد. اگه راه بهتری داره شما بفرمایید چون من جز این راهی بلد نیستم
چیزی که من میخوام یه دیتا گرید هست که ستون اول از نوع چک باکس و بقیه ستون ها از نوع تکست باکس هستند که مقدار تکست باکس ها از دیتا بیس گرفته میشه اما چک باکس ها ابتدای امر خالی هست . کاربر باید ستون ها رو از طریق مارک کردن تکست باکس ها انتخاب کنه اما نوع کار طوری هست که من باید حتما هر بار توی دیتابیس این مقادیر رو آپدیت کنم یعنی حتما باید تو جدول ثبت بشه که الان کدوم رکورد ها انتخاب شدن
بی نهایت متشکر از پاسخگویی شما

hsmfaridmehr
چهارشنبه 23 اردیبهشت 1388, 22:26 عصر
دوست عزیز تازه متوجه مشکلتون شدم که متاسفانه نمی دونم چطور حل میشه
ولی ی راه حل میدم اگه خوب بود استفاده کن

به جای استفاده از CheckBox هر بار که خواستی اینجوری به تمام رکوردهای انتخاب شده دسترسی پیدا کن



for(int i=0;i<dataGridView1.SelectedRows.Count;i++)
{
dataGridView1.SelectedRows[i].Cells["ID"].Value.ToString();
}


البته کاربر باید رکورد های مورد نظرش رو دستی(یعنی با نگه داشتن کلید کنترل و کلیک کردن روی سطر های مورد نظر) انتخاب کنه

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

darksunrise
چهارشنبه 23 اردیبهشت 1388, 22:51 عصر
خیلی ممنون از راهنمایی تون اما متاسفانه کار فرما میخواد حتما چک باکس باشه
از دوستان دیگه اگه کسی میدونه این مشکل چه جوری حل میشه لطف کنه من رو راهنمایی کنه که بد جوری گیر کردم چند روش مختلف رو امتحان کردم جواب نداده

hsmfaridmehr
پنج شنبه 24 اردیبهشت 1388, 00:33 صبح
اینو امتحان کن جواب میده



dataGridView1.Columns.Insert(0, newDataGridViewCheckBoxColumn());


و از طریق کد زیر به مقدار اون سلول برس



dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString();

darksunrise
پنج شنبه 24 اردیبهشت 1388, 19:00 عصر
خیلی متشکر از اینکه وقت گذاشتی . تا همین جا ش خیلی کمکم کرد
فقط 1 تا سوال دیگه
کد دومی که شما نوشتی رو باید کجا اضافه کنم ؟ تو رویداد کلیک button که میخوام که نمیشه باید به جای eventarg فکر کنم DataGridViewCellEventArgs باشه
من توی رویداد enterRowگذاشتم که هر موقع روی هر ردیف کلیک میکنم میگه که مقدار انتخاب شده true هست یا false
اما چیزی که من در نهایت میخوام این هست که وقتی روی button کلیک میکنم توی یک حلقه بگرده و مقدار چک باکس رو چه true باشه و چه false توی دیتا بیس ذخیره کنه
کدی که مد نظر من هست (با توجه به راهنمایی شما) کد زیر هست


private void button2_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
for (int i = 0; i < dataGridView1.RowCount-1; i++)
{


SqlConnection con = new SqlConnection(strcon);
SqlCommand com = new SqlCommand();

com.CommandText = "insert into student ([chek]) values ('" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString()+"')";
com.Connection = con;
SqlDataAdapter adapt = new SqlDataAdapter(com);

adapt.Fill(dt);
}
dataGridView1.DataSource = dt;
}

البته قطعا انتظار ندارم کار کنه اما حدود کار همینه الان فقط سوالم اینه که چه جوری به row index دسترسی داشته باشم البته توی رویداد کلیک
یا چه جوری میشه کاری کرد rowindex رو بشناسه

hsmfaridmehr
پنج شنبه 24 اردیبهشت 1388, 21:41 عصر
نه من اون کد رو واسه رویداد CellClick نوشتم واسه شما داخل این کد میشه اینجوری



dataGridView.Rows[i].Cells[Column number].EditedFormattedValue.ToString();

darksunrise
پنج شنبه 24 اردیبهشت 1388, 21:48 عصر
واقعا دستتون درد نکنه خیلی زحمت کشیدید

Hamed Hosseini
جمعه 25 اردیبهشت 1388, 02:27 صبح
خيلي پاسختون خوب بود. ممنون منم تازگي به اين مشكل برخورده بودم كه حل شد