PDA

View Full Version : حركت در DataTable



ir.start
شنبه 18 مهر 1388, 08:58 صبح
كدام دستور براي حركت در ركورد هاي قرار گرفته درdata table استفاده ميشه


SqlDataAdapter da = new SqlDataAdapter("select * from info", "Data Source=292.158.0.91;Initial Catalog=test;User ID=sa;Password=123");
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(dt);

البته تو كد بالا dt رو بصورت فيلد گرفتم اما وقتي كد بالا رو براي ذخيره تغيرات تو بانك استفاده ميكنم تغيرات اعمال نميشه و بايد حتما از ركوردي كه در حال تغيير هست خارج بشم به همين خاطر ميخواهم dt رو يك ركورد به جلو يا عقب ببرم

sara.f
شنبه 18 مهر 1388, 09:00 صبح
كدام دستور براي حركت در ركورد هاي قرار گرفته درdata table استفاده ميشه


SqlDataAdapter da = newSqlDataAdapter("select * from info", "Data Source=292.158.0.91;Initial Catalog=test;User ID=sa;Password=123");
SqlCommandBuilder cb = newSqlCommandBuilder(da);
da.Update(dt);

البته تو كد بالا dt رو بصورت فيلد گرفتم اما وقتي كد بالا رو براي ذخيره تغيرات تو بانك استفاده ميكنم تغيرات اعمال نميشه و بايد حتما از ركوردي كه در حال تغيير هست خارج بشم به همين خاطر ميخواهم dt رو يك ركورد به جلو يا عقب ببرم

سلام
چرا برای ذخیره تغییرات از دستور update استفاده نمی کنید؟

ir.start
شنبه 18 مهر 1388, 09:07 صبح
چون اينجوري update و delete و insert رو با هم ميشه تو بانك اعمال كرد ونيازي نيست براي هركدوم بطور جداگانه دستور نوشت شما جواب سوال من رو ميدونيد؟

sara.f
شنبه 18 مهر 1388, 10:07 صبح
چون اينجوري update و delete و insert رو با هم ميشه تو بانك اعمال كرد ونيازي نيست براي هركدوم بطور جداگانه دستور نوشت شما جواب سوال من رو ميدونيد؟
دوست من به نظرم این روش اشتباهی هست که می خواهی اعمالی که هیچ ربطی به هم ندارند را با هم انجام دهی و من متوجه نمیشم چطور می تونی با هم مثلا یک رکورد را هم حذف کنی و هم update کنی!!!

ir.start
شنبه 18 مهر 1388, 10:13 صبح
نه منظور من اين نيست كه هم يك ركورد رو حذف يا تغيير بدي
شما اينجوري فكر كن كه ميخواهي پس از نمايش ديتا تيبل تو يك گريد ببياي ركورد 3 و 4 اون رو حذف كني
ركورد 10 اون رو update كني و يك ركورد جديد هم به اون اضافه كني با كدي كه بالا گذاشتم ميشه اين كار ها رو كرد ولي بايد روي ركوردي كه اخرين تغييرات انجام شده حركت كرد و مثلا يك ركورد به عقب برگشت يا روي گريد خارج از اون ركوردي كه هستي قرار بگيري تا اخرين تغييرات هم انجام بشه
تو سايت يك نمونه با ديتا ست ديدم ولي كدش يك كمي بيشتر ازاينيه كه من گذاشتم
حالا سوال من اينه چجوري ميشه در ديتا تيبل حركت كرد؟

اَرژنگ
شنبه 18 مهر 1388, 10:24 صبح
نه منظور من اين نيست كه هم يك ركورد رو حذف يا تغيير بدي
شما اينجوري فكر كن كه ميخواهي پس از نمايش ديتا تيبل تو يك گريد ببياي ركورد 3 و 4 اون رو حذف كني
ركورد 10 اون رو update كني و يك ركورد جديد هم به اون اضافه كني با كدي كه بالا گذاشتم ميشه اين كار ها رو كرد ولي بايد روي ركوردي كه اخرين تغييرات انجام شده حركت كرد و مثلا يك ركورد به عقب برگشت يا روي گريد خارج از اون ركوردي كه هستي قرار بگيري تا اخرين تغييرات هم انجام بشه
تو سايت يك نمونه با ديتا ست ديدم ولي كدش يك كمي بيشتر ازاينيه كه من گذاشتم
حالا سوال من اينه چجوري ميشه در ديتا تيبل حركت كرد؟


System.Data.DataTable dt;
dt.Rows[in]

شما دارید ازDisconnected Model استفاده میکنید، هنوز دستورهایه مختلف برایه آپدیت، دیلیت ، اضافه شدن، استفاده میشه، و باید در قسمت TableAdapter پیاده بشند.

sara.f
شنبه 18 مهر 1388, 10:31 صبح
System.Data.DataTable dt;
dt.Rows[in]

شما دارید ازDisconnected Model استفاده میکنید، هنوز دستورهایه مختلف برایه آپدیت، دیلیت ، اضافه شدن، استفاده میشه، و باید در قسمت TableAdapter پیاده بشند.
سلام
یعنی با نوشتن این خط سطری که در آن هستیم را میده؟
من این خط را نوشتم و خطای زیر را داد


Invalid expression term 'in'

mahdi_7610
شنبه 18 مهر 1388, 10:39 صبح
شما قصد دارید هر سه کار اپدیت و دلیت و ثبت را با یک دکمه انجام بدی ؟

و همچنین شما قصد دارید تغییرات را توی دیتاگرید انجام بدید و با دکمه اونها را ثبت کنی ؟

یه نمونه اینجا گذاشتم .

http://barnamenevis.org/forum/showpost.php?p=819869&postcount=4

اَرژنگ
شنبه 18 مهر 1388, 10:45 صبح
سلام
یعنی با نوشتن این خط سطری که در آن هستیم را میده؟
من این خط را نوشتم و خطای زیر را داد


Invalid expression term 'in'

خیر، اشتباه تایپی بود، به جایه in میخواستم بنویسم i, یک ایندکس که با کم و زیاد کردنش به DataRow هایه متفاوت دسترسی میکنم.

پیشفرض: i و dt قبلا مقدار دهی شدند

ir.start
شنبه 18 مهر 1388, 10:56 صبح
شما قصد دارید هر سه کار اپدیت و دلیت و ثبت را با یک دکمه انجام بدی ؟

و همچنین شما قصد دارید تغییرات را توی دیتاگرید انجام بدید و با دکمه اونها را ثبت کنی ؟

یه نمونه اینجا گذاشتم .

http://barnamenevis.org/forum/showpost.php?p=819869&postcount=4

من كه گفتم اين كد رو تو سايت ديدم اين كد دوتا ايراد داره يكي كد نويسيش زياده و و دوم بايد مقدار id مشخص بشه

sara.f
شنبه 18 مهر 1388, 11:00 صبح
خیر، اشتباه تایپی بود، به جایه in میخواستم بنویسم i, یک ایندکس که با کم و زیاد کردنش به DataRow هایه متفاوت دسترسی میکنم.

پیشفرض: i و dt قبلا مقدار دهی شدند
اتفاقا من می خواستم در پاسخ دوستمون از این کد استفاده کنم ، ولی از کجا بدونیم که این رکورد ، همون رکوردی هست که می خوایم تغییرش بدیم؟

ir.start
شنبه 18 مهر 1388, 11:10 صبح
من كد رو اينجوري تصحيح كردم يكbindingSource رو فرم گذاشتم و يك خط كد بهش اضافه كردم اين كار دو مزيت داشت يكي كارم رو راه انداخت و ديگه اينكه به كاربر اجازه دادم راحتتر روي ركورد ها جابجا بشه ودر ضمن روي اخرين ركوردي كه عمليات update انجام شده هم ميشه قرار گرفت
اين هم كدش اگرچه به دل خودم ننشست


privatevoid button1_Click(object sender, EventArgs e)
{
idx = bindingSource1.Position;
bindingSource1.MoveNext();
SqlDataAdapter da = newSqlDataAdapter("select * from info", "Data Source=292.168.0.101;Initial Catalog=test;User ID=sa;Password=123");
SqlCommandBuilder cb = newSqlCommandBuilder(da);

da.Update(dt);
}

اَرژنگ
شنبه 18 مهر 1388, 11:15 صبح
اتفاقا من می خواستم در پاسخ دوستمون از این کد استفاده کنم ، ولی از کجا بدونیم که این رکورد ، همون رکوردی هست که می خوایم تغییرش بدیم؟
من فقط قسمت جلو یا عقب رفتنRow در DataTable را فرستادم، اینکه کدام رکورد در حال تغییر هست معنی ندارد.
شاید سوال اصلی ایشان این هست:
من دارم در داتاگرید ویو از یک تیبل استفاده میکنم، منتها اگر تعییراتی ایجاد کنم و مستقیم دگمه آپدیت را بزنم، تغییراتی که در رکورد حاضر در داخلش قرار دارم ثبت نمیشه.
اگر سوالشان این هست، بگن که ما هم ادامه بدیم، وگرنه از این بیشتر نمیشه پیش رفت.

اَرژنگ
شنبه 18 مهر 1388, 11:18 صبح
من كد رو اينجوري تصحيح كردم يك رو فرم گذاشتم و يك خط كد بهش اضافه كردم اين كار دو مزيت داشت يكي كارم رو راه انداخت و ديگه اينكه به كاربر اجازه دادم راحتتر روي ركورد ها جابجا بشه ودر ضمن روي اخرين ركوردي كه عمليات update انجام شده هم ميشه قرار گرفت
اين هم كدش اگرچه به دل خودم ننشست


privatevoid button1_Click(object sender, EventArgs e)
{
idx = bindingSource1.Position;
bindingSource1.MoveNext();
SqlDataAdapter da = newSqlDataAdapter("select * from info", "Data Source=292.168.0.101;Initial Catalog=test;User ID=sa;Password=123");
SqlCommandBuilder cb = newSqlCommandBuilder(da);

da.Update(dt);
}


دلیل اینکه به دلتان ننشست این است:
bindingSource1.MoveNext
اگر کاربر در رکورد آخر باشد چی؟
منظورتان از رکوردی كه در حال تغيير هست ، رکوردی كه در حال تغيير در داتاگرید ویو هست؟

ir.start
شنبه 18 مهر 1388, 11:24 صبح
جناب ار‍‍ژنگ ممنون از اينكه تو بحث شركت كردين

دلیل اینکه به دلتان ننشست این است:
bindingSource1.MoveNext بله اين همونيه كه گفتم به دل نميشينه
اگر کاربر در رکورد آخر باشد چی؟مشكلي ايجاد نميشه !!
منظورتان از رکوردی كه در حال تغيير هست ، رکوردی كه در حال تغيير در داتاگرید ویو هست؟ بله منظور من همينه

ir.start
شنبه 18 مهر 1388, 11:33 صبح
اما هنوز متوجه نشدم اگه ديتا تيبل غير متصل كار ميكنه چجوري با حركت روي ديتا گريد عمليات مورد نظر من انجام ميشه مگه اينكه به قول شما ديتا اداپتور هم تغيير كنه اين درسته؟

sara.f
شنبه 18 مهر 1388, 11:36 صبح
من فقط قسمت جلو یا عقب رفتنRow در DataTable را فرستادم، اینکه کدام رکورد در حال تغییر هست معنی ندارد.
شاید سوال اصلی ایشان این هست:
من دارم در داتاگرید ویو از یک تیبل استفاده میکنم، منتها اگر تعییراتی ایجاد کنم و مستقیم دگمه آپدیت را بزنم، تغییراتی که در رکورد حاضر در داخلش قرار دارم ثبت نمیشه.
اگر سوالشان این هست، بگن که ما هم ادامه بدیم، وگرنه از این بیشتر نمیشه پیش رفت.
خب شما فرض کنید، سوالشون همینه، باید چیکار کرد؟

ir.start
شنبه 18 مهر 1388, 11:36 صبح
شاید سوال اصلی ایشان این هست:
من دارم در داتاگرید ویو از یک تیبل استفاده میکنم، منتها اگر تعییراتی ایجاد کنم و مستقیم دگمه آپدیت را بزنم، تغییراتی که در رکورد حاضر در داخلش قرار دارم ثبت نمیشه.
اگر سوالشان این هست، بگن که ما هم ادامه بدیم، وگرنه از این بیشتر نمیشه پیش رفت.
بله سوال من همين كه شما فرمودين اگه براتون مقدوره مبحث رو ادامه بدين ممنون

sara.f
شنبه 18 مهر 1388, 11:38 صبح
شما قصد دارید هر سه کار اپدیت و دلیت و ثبت را با یک دکمه انجام بدی ؟

و همچنین شما قصد دارید تغییرات را توی دیتاگرید انجام بدید و با دکمه اونها را ثبت کنی ؟

یه نمونه اینجا گذاشتم .

http://barnamenevis.org/forum/showpost.php?p=819869&postcount=4
نمی دونم چرا من وقتی برنامه را run می کنم هیچ اتفاقی نمی افته، یعنی برنامه اجرا نمیشه.

ir.start
شنبه 18 مهر 1388, 11:42 صبح
بخاطر اينكه شما تيبل مورد استفاده از سورس رو ندارين منظورم table1

اَرژنگ
شنبه 18 مهر 1388, 11:47 صبح
جناب ار‍‍ژنگ ممنون از اينكه تو بحث شركت كردين

دلیل اینکه به دلتان ننشست این است:
bindingSource1.MoveNext بله اين همونيه كه گفتم به دل نميشينه
اگر کاربر در رکورد آخر باشد چی؟مشكلي ايجاد نميشه !!
منظورتان از رکوردی كه در حال تغيير هست ، رکوردی كه در حال تغيير در داتاگرید ویو هست؟ بله منظور من همينه



dataGridView1.EndEdit (http://msdn.microsoft.com/en-us/library/ms158620.aspx)()

با تشکر بسیار از شما که قابلیت دیدن اینکه کد بهتر وجود دارد را احساس کردید، اینکه تامل به خرج دادید و از یک روشی که فقط در ظاهر سروته قضی ه رو هم بیاره استفاده نکردید تشکر میکنم.

ببخشید داشتم تلفن جواب میدادم برایه همین دیر جواب دادم.

sara.f
شنبه 18 مهر 1388, 11:48 صبح
بخاطر اينكه شما تيبل مورد استفاده از سورس رو ندارين منظورم table1
table1 را باید در sql خودم ایجاد کنم؟

ir.start
شنبه 18 مهر 1388, 11:53 صبح
بله ميتونيد خودتون ايجادش كنيد ولي كد انقدر واضحه كه خود شما هم ميتونيد دركش كنيد احتياج به
ساختن تيبل نيست

ir.start
شنبه 18 مهر 1388, 11:57 صبح
dataGridView1.EndEdit (http://msdn.microsoft.com/en-us/library/ms158620.aspx)()

با تشکر بسیار از شما که قابلیت دیدن اینکه کد بهتر وجود دارد را احساس کردید، اینکه تامل به خرج دادید و از یک روشی که فقط در ظاهر سروته قضی ه رو هم بیاره استفاده نکردید تشکر میکنم.

ببخشید داشتم تلفن جواب میدادم برایه همین دیر جواب دادم.

اين كدي كه زحمت كشيديد براي يك باتون معمولي جواب ميده اما وقتي اون رو تو يك باتون مربوط به بايندينگ سورس ميذارم جواب نميده البته كد خود من هم جواب نداد به نظر شما علتش چيه
ممنون

ir.start
شنبه 18 مهر 1388, 12:03 عصر
dataGridView1.EndEdit (http://msdn.microsoft.com/en-us/library/ms158620.aspx)()

با تشکر بسیار از شما که قابلیت دیدن اینکه کد بهتر وجود دارد را احساس کردید، اینکه تامل به خرج دادید و از یک روشی که فقط در ظاهر سروته قضی ه رو هم بیاره استفاده نکردید تشکر میکنم.

ببخشید داشتم تلفن جواب میدادم برایه همین دیر جواب دادم.
ممنون كدتون رو تست كردم براي حذف و اپديت جواب داد اما براي insert جواب نداد و اخرين ركوردي كه تو گريد وارد كردم رو inser نكرد البته شايد از كد من باشه كدي كه نوشتم اينه

dataGridView1.EndEdit();
SqlDataAdapter da= new SqlDataAdapter("select * from info", "Data Source=292.268.0.101;Initial Catalog=test;User ID=sa;Password=123");
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(dt);

اَرژنگ
شنبه 18 مهر 1388, 12:16 عصر
bindingSource1.EndEdit();


مطمعن نیستم این کافیه یا باید از هر دو شان استفاده کنید،
اول همین را فقط امتحان کن، اشکالی داشت بگید

ir.start
شنبه 18 مهر 1388, 12:27 عصر
براي insert جواب نداد ولي همين هم ميشه جاي ديگه ازش استفاده كرد
من ميخواستم كنترل اضافي نداشته باشم وگرنه همون كد
bindingSource1.MoveFirst();
جواب ميداد باز هم ممنن از همه اساتيدي كه همكاري كردين