PDA

View Full Version : اضافه کردن یک ستون شمارنده به دیتا گرید



Chabok
سه شنبه 11 مرداد 1384, 23:52 عصر
با سلام و خسته نباشید خدمت اساتید وی بی دات نت

من می خواستم یک ستون ثابت شمارش رکوردها به دیتا گرید اضافه کنم
یعنی از 1 تا n

بطوریکه ثابت باشه و بر اثر Sort دیتا گرید تغییری نکنه
یعنی همیشه ستون اول دیتاگرید شماره های 1 به بعد باشه

اگه نمیشه این کارو کرد چیکار کنم .
راههای متفاوتی به سرم زد . ولی همشون بیخود بودند

یکی اینکه یه DataTable بسازم و با حلقه For اون را پر کنم و به
دیتاست اضافه کنم

ولی بعد فهمیدم که به دیتاست پر شده نمیشه Table اضافه کرد

و یا اینکه از کد خود رکورد استفاده کنم .
ولی اون را نمیشه ثابت نگه داشت .(طبق چیزی که در بالا گفتم)

خواهش کمک کنید تا بتونم یه شمارنده به دیتا گرید اضافه کنم
از کسانی که کمک می کنند بسیار ممنونم و از کسانی که کمک نمی کنند خواهش می کنم کمک کنند

یاشار
چهارشنبه 12 مرداد 1384, 14:54 عصر
چون ستون ترتیب ربطی به اطلاعات داخل دیتابیس نداره، بنابراین توی دیتاست هم نباید مقداردهی بشه، وگر نه هر بار که دیتاست رو آپدیت می‌کنید ستون ترتیب هم آپدیت میشه. بنابراین بهتره که از Table Style برای اینکار استفاده کنیم که هر Cell رو با توجه به جایش هنگام اجرا مقدار دهی کنیم.

راجع به استفاده از استایل قبلا (http://www.barnamenevis.org/forum/showpost.php?p=119804&postcount=2) یه بحثی کرده بودیم که البته فایلی که آپلود کرده بودم از بین رفته و خودم هم ندارمش. یکی دیگه نوشتم میذارم اینجا امیدوارم تو اسباب کشی بعدی سایت ناپدید نشه. توی این برنامه فرض شده که یک ستون Nullable به نام Order در جدول وجود داره که با توجه به شماره سطرش توی جدول مقدار دهی میشه. ضمنا از یک فایل xml به جای دیتابیس برای پر کردن دیتاست استفاده شده.

عکس (http://photos21.flickr.com/30872473_b6fbf14aef.jpg?v=0)

پ.ن. : فایل دومی اشکال فایل اولی موقع کلیک کردن رو نداره.

Chabok
چهارشنبه 12 مرداد 1384, 16:26 عصر
آقا خدا خیرت بده
لطف کردی
ممنون

ولی یه کم پیچیده است.
من اصلا جایی که شماره ها را اضافه می کنید رو پیدا نکردم

آخه یه کامپوننت هم توشه که یه عالمه کنترل داره (با اسم Yashar)

به خدا گیج شدم
میشه یه قسمت هاییش که لازم نیست رو حذف کنید تا بهتر متوجه بشم

شرمندم
ممنون میشم

یاشار
پنج شنبه 13 مرداد 1384, 17:45 عصر
در این دیتاگرید به جای استفاده از Style پیش فرض از یک استایل سفارشی استفاده شده که به شما اجازه می‌ده رنگ پیش زمینه هر سطر یا ستون رو با توجه به مقدار Cell ها در زمان اجرا تعیین کنید و کنترل‌های سفارشی داخل دیتاگرید بگذارید و خیلی کارهای دیگه. در این استایل به جای DataGridTextBoxColumn از کلاس دیگه‌ای به نام FormatableTextBox استفاده شده که از مقاله زیر گرفتم و با یه کم دستکاری اون چیزی شد که میبینید.

Customizing the Windows Forms DataGrid (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/wnf_CustDataGrid.asp)

اگر امکانات دیگه ش رو لازم ندارید می‌تونید از این یکی استفاده کنید. نوشتن ترتیب ستون ها توی روال SetRowForamat در Form1 انجام میشه. این روال در واقع یک EventHandler هست که هر بار که یک Cell میخواد Paint بشه اجرا می‌شه.

FormatableTextBox از کلاس DataGridTextBoxColumn به ارث برده شده و فقط متد Paint ش Override شده و چند تا Property بهش اضافه شده. یک Event به نام SetCellFormat هم براش تعریف شده و قبل از هر Paint مربوط به تک تک Cell ها Fire می‌شه. به این ترتیب اگر ده هزارتا ردیف توی دیتاست داشته باشید و بخواهید اون ردیف هایی که یه مقدار خاص توش هست با رنگ جداگانه مشخص بشن، لازم نیست تمام ردیف‌ها بررسی بشن بلکه فقط اونهایی که دیده میشن رنگشون عوض می‌شه.

ضمنا Yashar ، کامپوننت جداگانه‌ای نیست. صرفا یک NameSpace هست که من این کلاس‌های سفارشی رو توش گذاشتم که بتونم زود پیداشون کنم.

سار
یک شنبه 16 مرداد 1384, 11:06 صبح
به نظر من این روش جالب تره البته اگر از SQL Server استفاده میکنید.
SELECT @@IDENTITY AS ident

یاشار
یک شنبه 16 مرداد 1384, 12:08 عصر
IDENTITY@@ لزوما اعداد ترتیبی 1 تا n برنمی‌گردونه، شاید چند تا از ردیف‌ها حذف شده باشه و بین اعداد فاصله افتاده باشه. شاید هم ده تا ردیف آخر Select شده باشند. ضمنا وقتی user گرید رو بر اساس ستون‌های دیگه مرتب می‌کنه، ترتیب ستون IDENTITY@@ به هم می‌ریزه.

علی باحجب مودتی
یک شنبه 23 مرداد 1384, 15:45 عصر
من آخرش مشکلم را بردم به sql server
کوری زیر مشکل تورا حل میکند

select e1.* ,(select count(*) from tabel e2 where e1.keyfield> e2.keyfield )
from tabel e1