PDA

View Full Version : آموزش: حرکت بین رکوردهای یک جدول در سی شارپ



bahram1100
جمعه 20 آبان 1390, 18:48 عصر
با عرض سلام خدمت دوستان
من یک گریدویو دارم و چند تا تکست باکس که اطلاعاتم را هم در گرید ویو و هم تکست باکس بایند کردم.
چجوری بین رکوردهای گریویو با یک باتن جلو و یک باتن عقب برم و چجوری آن چند تا تکست باکس هم که بایند کردم هم حرکت کنم.
در ضمن من سرچ کردم در رابطه با این موضوع کد های مربوط به vb را پیدا کردم نه سی شارپ.
اگه میشه خوب برام توضیح بدین که خوب یاد بگیرم.
با تشکر فراوان

Farshid007
جمعه 20 آبان 1390, 19:44 عصر
باید کارنسی منیجر توصیف کنید و پوزیشن رو کم و زیاد کنید!

bahram1100
جمعه 20 آبان 1390, 21:52 عصر
فرشید خان میشه بیشتر توضیح بدین و کدهاشو برام بنویسین.
ممنون میشم.

علیرضا حسن زاده
جمعه 20 آبان 1390, 22:40 عصر
اگه از Binding کنترل استفاده کنی این متد ها رو داره و می تونی با فراخوانی مثلا متد MoveNext به رکورد بعدی بری و هیچ برنامه نویسی اضافی هم نمی خواد فقط کافی این تابع رو در رویداد کلیک دکمه فراخوانی کنی

NasrEsk
جمعه 20 آبان 1390, 22:44 عصر
مي توي از اين كد استفاده كني.
this.BindingContext[DataTable].Position++;
يا علي

bahram1100
جمعه 20 آبان 1390, 23:02 عصر
من از این کدی که گفتین استفاده کردم هیچ تغییری نمیکنه یعنی کد درسته ولی عمل نمیکنه یعنی روی دکمه که کلیک می کنم روی رکورد بعدی نمیره.
کدی که استفاده میکنم :
یه کانکشن ساختم
SqlDataAdapter da = new SqlDataAdapter("", con);
da.SelectCommand.CommandText = "Select * from FilmGroup ";
DataSet ds = new DataSet();
da.Fill(ds, "t1");
this.BindingContext[ds.Tables["t1"]].Position += 1;
لطفا راهنماییم کنین تا این مشکل رفع بشه

bahram1100
شنبه 21 آبان 1390, 00:27 صبح
کسی نیست جواب سوال مرا بدونه؟

bahram1100
شنبه 21 آبان 1390, 14:03 عصر
بچه ها من از دستور بالایی که نوشتم رفتم کار نداد.
کسی راه دیگه ای نمیدونه؟:متفکر:

bahram1100
شنبه 21 آبان 1390, 20:31 عصر
یعنی کسی نیست جواب این سوال را بدونه؟

zarrinnegar
شنبه 21 آبان 1390, 20:45 عصر
یک bindingsource بساز بعد datasource گرید و تکست باکست رو به این لینک کن
بعد توی دکمه این کد رو بنویس
bindingSource1.MoveNext();

برای برگشت به عقب هم کد داره

bahram1100
شنبه 21 آبان 1390, 21:04 عصر
کار نمیده
راه دیگه ای نیست؟

bahram1100
شنبه 21 آبان 1390, 21:17 عصر
عجب سوال سختیه
هرکی جواب داد جایزه داره:تشویق::تشویق:

zarrinnegar
شنبه 21 آبان 1390, 22:58 عصر
این لینک هارو سر بزن

http://www.codeproject.com/KB/database/SimulatingRecordsets.aspx
http://www.codeproject.com/KB/database/DatabaseAcessWithAdoNet1.aspx

bahram1100
یک شنبه 22 آبان 1390, 00:02 صبح
بچه ها من یک قطعه کد با کمی توضیح نیاز دارم.
من که از لینک های بالا چیزی سر در نیاوردم.

bahram1100
دوشنبه 23 آبان 1390, 15:47 عصر
من از Currency Manager استفاده می کنم ولی یه مشکل هست.
این کد را در یک باتن نوشتم :
SqlConnection con ;
SqlDataAdapter da = new SqlDataAdapter("", con);
da.SelectCommand.CommandText = "Select * from FilmGroup";
DataSet ds = new DataSet();
da.Fill(ds, "t1");
CurrencyManager cur;
cur = (CurrencyManager)(BindingContext[ds.Tables["t1"]]);
textBox2.Text = cur.Count.ToString();
وقتی روی باتن کلیک می کنم تعداد رکورد ها را بهم میده ولی وقتی که به جای خط آخر این کد را می زنم که به رکورد بعدی بره کار نمی کنه و دستور مرا اجرا نمی کنه
cur.Position += 1;
کسی می دونه مشکل چیه و من چه کدی را جا انداختم تا به وسیله این کد به رکورد بعدی برم؟
ممنون

bahram1100
سه شنبه 24 آبان 1390, 00:25 صبح
یعنی این سوال انقدر مشکله که کسی نمیتونه جواب بده؟

bahram1100
سه شنبه 24 آبان 1390, 11:25 صبح
یکی به من بگه این دستورات صحیحن یا غلط
اگه غلطن چرا؟

malek.unity
جمعه 05 اردیبهشت 1399, 20:09 عصر
یکی به من بگه این دستورات صحیحن یا غلط
اگه غلطن چرا؟
اوه سال 90...فک کنم راه حل رو پیدا کرده باشی اما اینو برا اونایی مینویسم که این مشکل براشون پیش میاد

برای اینکه بتونید با یک باتن یا یک دکمه از کیبرد بر روی مقادیر دیتاگریدویو حرکت کنید
ابتدا باید یک کارانسی منیجر در ابتدای محل کدنویسی یعنی در بالای سازنده کلاس تعریف کنید
CurranceyManager cr;

کارانسی منیجر مدیریت کننده هست
برای این کار بایددقیقا زمانی که دیتاگریدویو مقداردهی میشه ،کارانسی منیجر رو بهش وصل کنید.به این صورت
cr=(currancyManager)this.BindingContext[ds,"t1"];
ds=نام دیتا بیس مورد نظر
"t1"=نام جدول موجود و مقداردهی شده در دیتابیس
به این معنی که cr جدول تی یک از دیتابیس دی اس را مدیریت کند..وظیفه ی cr رو به عنوان یک مدیریت کننده تایین میکنیم.

کارانسی منیجر cr یک خصوصیت داره و اونهم position هست.
سپس در رویداد CellClick دیتاگرید ویو باید مقدار سلکت شده رو به عنوان موقعیت فعلی به Cr بدین:
cr.position=e.RowIndex;
یه تابع به این صورت مینویسم
( public void set(int i..
{
(if(i <0 || i>=cr.count
return;
cr.position=i;
datagrid.currentcell=datagrid.rows[i].cells[datadrid.currentcell.columnsindex];
}

در آخر همین تابع رو در رویدا keyup دیتاگرید ویو صدا بزنید به این شکل

;(set(datadrid.currentcell.rowindex

-------------------------------------------------------------------------------------------------------------------------------------

احتمالا دیکته بعضی جاها ایراد داره:لبخند::افسرده:

mmbguide
یک شنبه 07 اردیبهشت 1399, 21:41 عصر
سلام

خب اینکه شما اطلاعات را به کنترل های روی فرم بایند کردید بخش زیادی از کار رو انجام داده اید. خب حالا قبل از اینکه اطلاعات را به این کنترل ها بایند کنید ابتدا یک شیء از نوع BindingSource ایجاد کنید (حتما در این سایت و یا سایت های دیگر در موردش جستجو کنید و کار کردن باهاش بسیار سادست) و داده های خودتون رو به این شیء BindingSource بایند کنید و بعد این شیء BindingSource روبه گرید و یا هر کنترل دیگه ای باید کنید. حالا درکمه های حرکت به ردیف قبل و بعد رو طبق نظر دوستان در توضیحات بالا و تنها با نوشتن یک خط کوتاه میتونید دستورات MoveNext, MovePrevious, MoveLast, MoveFirst, Find, Filter و خیلی کارهای دیگه را به راحتی و تنها نوشتن چند کلمه انجام بدید.

کار با BindingSource سادست و در موردش سرچ کنید