PDA

View Full Version : سوال: خواندن اطلاعاتي كه در گريدويو تيك خورده شده اند



tara1367
چهارشنبه 18 مرداد 1391, 11:46 صبح
سلام
من يك گريدويو دارم كه اطلاعات را از يك جدول خوانده و ستون اول آن بصورت checkbox است. (البته اين ستون از قسمت مشخصات گريدويو ‍ColumnType بصورت checkbox تعريف شده است.) حال ميخواهم هر سطري كه تيگ زده شد اطلاعاتش به جدول ديگري منتقل شود. چگونه بايد از اين ستون checkbox استفاده كرد كه هر وقت رويداد check آن True بود اطلاعات را بخواند؟
با تشكر

tara1367
چهارشنبه 18 مرداد 1391, 12:04 عصر
اگه كسي ميدونه لطفا كمك كنه

veniz2008
چهارشنبه 18 مرداد 1391, 12:05 عصر
سلام، برای چک کردن اینکه آیا اون رکورد تیک خورده یا نه از دستور زیر استفاده کنید:

if(Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)
برای درج کردن هم راه ساده اما غیر بهینه اینه که بعد از همین if بیای و دستور درج رو بنویسی. اگر راه بهینه رو خواستی بگو تا بیشتر توضیح بدم.
موفق باشی.

tara1367
چهارشنبه 18 مرداد 1391, 12:17 عصر
سلام، برای چک کردن اینکه آیا اون رکورد تیک خورده یا نه از دستور زیر استفاده کنید:

if(Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)
برای درج کردن هم راه ساده اما غیر بهینه اینه که بعد از همین if بیای و دستور درج رو بنویسی. اگر راه بهینه رو خواستی بگو تا بیشتر توضیح بدم.
موفق باشی.


ممنون لطف كردين مشكلم حل شد ولي من براي درج كردن در ديتابيس معمولا بعد از همين دستور if مينويسم راه بهينش چيه؟

veniz2008
چهارشنبه 18 مرداد 1391, 12:26 عصر
این کاری که شما الان انجام میدی یه مشکل داره. فرض کن گرید شما 100 تا رکورد داره و شما همه رو تیک زدید، در اینصورت بایستی 100 بار به دیتابیس وصل بشی و عمل درج رو انجام بدی. ولی میتونی درون همین حلقه for همه رکوردهایی رو که تیک زدی درون یک متغیر رشته ای ذخیره کنی و بعد در خارج از حلقه با یک بار وصل شدن به دیتابیس عمل درج رو انجام میدید.
اینم کدش( توجه کنید اولین فیلد جدول من از نوع int هست واسه همین برای اولین فیلد تک کوتیشن نذاشتم):

string s = "";
int t = dataGridView1.Rows.Count;
for (int i = 0; i <= t - 1; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)
{
s = s + "insert into student2 values(" + dataGridView1.Rows[i].Cells[1].Value + ",'" + dataGridView1.Rows[i].Cells[2].Value + "',N'" + dataGridView1.Rows[i].Cells[3].Value + "',N'" + dataGridView1.Rows[i].Cells[4].Value + "')" + ";";
}
}
s = s.Remove(s.Length - 1, 1);
con = new SqlConnection("Data source =(local);initial catalog = testgrid;integrated security = true");
con.Open();
SqlCommand cmd = new SqlCommand(s, con);
cmd.ExecuteNonQuery();
con.Close();

tara1367
چهارشنبه 18 مرداد 1391, 12:34 عصر
این کاری که شما الان انجام میدی یه مشکل داره. فرض کن گرید شما 100 تا رکورد داره و شما همه رو تیک زدید، در اینصورت بایستی 100 بار به دیتابیس وصل بشی و عمل درج رو انجام بدی. ولی میتونی درون همین حلقه for همه رکوردهایی رو که تیک زدی درون یک متغیر رشته ای ذخیره کنی و بعد در خارج از حلقه با یک بار وصل شدن به دیتابیس عمل درج رو انجام میدید.
اینم کدش( توجه کنید اولین فیلد جدول من از نوع int هست واسه همین برای اولین فیلد تک کوتیشن نذاشتم):


string s = "";

int t = dataGridView1.Rows.Count;

for (int i = 0; i <= t - 1; i++)

{

if(Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)

{

s = s + "insert into student2 values(" + dataGridView1.Rows[i].Cells[1].Value + ",'" + dataGridView1.Rows[i].Cells[2].Value + "',N'" + dataGridView1.Rows[i].Cells3].Value + "',N'" + dataGridView1.Rows[i].Cells[4].Value + "')" + ";";

}

}

s = s.Remove(s.Length - 1, 1);

con = new SqlConnection("Data source =(local);initial catalog = testgrid;integrated security = true");

con.Open();

SqlCommand cmd = new SqlCommand(s, con);

cmd.ExecuteNonQuery();
con.Close();


ممنون فقط اين قسمت كد رو نفهميدم براي چيه
s = s.Remove(s.Length - 1, 1);

veniz2008
چهارشنبه 18 مرداد 1391, 12:39 عصر
اگه توجه کرده باشید آخر هر insert یک ; وجود داره که در واقع هر رکورد رو از رکورد بعدی جدا میکنه. آخرین رکورد نیازی به ; نداره. واسه همین با دستور Remove گفتم که آخرین کاراکتر ( s.Length - 1 ) رو حذف کن.( عدد 1 یعنی یک کاراکتر که میشه همون ; ).

tara1367
چهارشنبه 18 مرداد 1391, 12:43 عصر
آهان ممنون لطف كردين.

nooshin964
چهارشنبه 12 تیر 1392, 22:21 عصر
دوست عزیز فقط یک بار Insert Into هم کافیه . مثال ساده :

Insert Into T(a,b) Values (1,2) , (1,3) , (1,4)