PDA

View Full Version : سوال: حرفه‌ای: مشکل در تنظیمات پیش‌فرض DataGridViewColumn سفارشی (طبق نمونه عکس)



gilsoft
چهارشنبه 08 بهمن 1393, 07:54 صبح
سلام دوستان

من یه DataGridViewColumn سفارشی نوشتم ، که کارش درج ستون شماره ردیف در DataGridView هست ...

اول به تصویر نگاه کنید:
127978

در واقع هنگام اضافه کردن Column به DataGridView (در صورت امکان) میخوام:

1 - در قسمت کادر قرمز رنگ به جای Column5 ... پیش‌فرض بشه RowNum1
2 - در قسمت کادر سبز رنگ بجای Column5 ... پیش‌فرض بشه ردیف
3 - CheckBoxهای درون کادر آبی هم بصورت پیش‌فرض تیک‌دار باشند.

به نظر شما آیا این امکان وجود داره ؟ :متفکر:

ممنون میشم یه راهنمایی بفرمائید .....

Mani_rf
چهارشنبه 08 بهمن 1393, 10:52 صبح
ساده ترین راه اینه که به این شکل عمل کنی :

Dim Col As New DataColumn With {.AutoIncrement = True, .ReadOnly = True,
.AutoIncrementSeed = 1,
.AutoIncrementStep = 1,
.ColumnName = "RowNum1",
.Caption = "ردیف"}


Dim table As New DataTable
table.Columns.Add(Col)


DataGridView1.DataSource = table

یک DataColumn از نوع AutoIncrement ایجاد کنید و به یک DataTable اضافه کنید و بعد از اون مابقی ستون های سورس رو به DataTable اضافه کنید و به عنوان DataSource به DataGridView مورد نظر اضافه کنید.

gilsoft
چهارشنبه 08 بهمن 1393, 17:26 عصر
ساده ترین راه اینه که به این شکل عمل کنی :

Dim Col As New DataColumn With {.AutoIncrement = True, .ReadOnly = True,
.AutoIncrementSeed = 1,
.AutoIncrementStep = 1,
.ColumnName = "RowNum1",
.Caption = "ردیف"}


Dim table As New DataTable
table.Columns.Add(Col)


DataGridView1.DataSource = table

یک DataColumn از نوع AutoIncrement ایجاد کنید و به یک DataTable اضافه کنید و بعد از اون مابقی ستون های سورس رو به DataTable اضافه کنید و به عنوان DataSource به DataGridView مورد نظر اضافه کنید.

سلام دوست خوب من

ضمن تشکر از حسن توجه شما ...
باید عرض کنم که: در جایی دیگر هم شما همین کد رو به دوستان معرفی کردید و من هم از این کد استفاده می‌کردم ... ولی به مشکل برخوردم ....

مشکل اینه که: اگه خاصیت AllowUserToAddRows دیتاگرید برابر True باشد و کاربر عمداً یا سهواً به روی رکورد جدید ( آخرین رکورد ) کلیک کند .. به شمارنده یکی اضافه می‌شود ! بدین صورت که: بر فرض مثال: دیتاگرید ما 5تا رکورد دارد ، و ما به ترتیب روی رکوردهای 1 ، جدید ، 3 ، جدید ، 4 ، جدید کلیک کنیم .... شماره رکورد جدید بجای 6 .. برابر 8 می‌شود ....

بازم ممنون از راهنمایی شما

Mani_rf
چهارشنبه 08 بهمن 1393, 18:02 عصر
این نمونه کد برای زمانی مناسبه که نخوای اجازه بدی کاربر سطر ها رو تغییر بده. در غیر این صورت باید با هربار تغییر با یک حلقه For ساده مقدار همه ردیف ها رو ریست کنی.
من کلا توی هیچ کدوم از پروژه هایی که کارکردم اجازه ندادم که کاربر توی گرید تغییری در اطلاعات ایجاد کنه و از اون فقط برای نمایش اطلاعات استفاده کردم. البته اکثرا از همین روش استفاده میکنن.

gilsoft
چهارشنبه 08 بهمن 1393, 23:11 عصر
این نمونه کد برای زمانی مناسبه که نخوای اجازه بدی کاربر سطر ها رو تغییر بده. در غیر این صورت باید با هربار تغییر با یک حلقه For ساده مقدار همه ردیف ها رو ریست کنی.
من کلا توی هیچ کدوم از پروژه هایی که کارکردم اجازه ندادم که کاربر توی گرید تغییری در اطلاعات ایجاد کنه و از اون فقط برای نمایش اطلاعات استفاده کردم. البته اکثرا از همین روش استفاده میکنن.

سلام مجدد

من از گرید مذکور برای ورود (صدور) سند حسابداری استفاده می‌کنم لازمه که خاصیت AllowUserToAddRows برابر True باشه ..... برای همین فکر کردم یه DataGridViewColumn سفارشی بنویسم خیلی بهتره ..... حداقلش اینه که تو سایر گریدها میتونم ازش استفاده کنم ....

و از طرفی دیگر .. اینو یاد گرفتتم که : تو NET. باید نون بازوی خودت رو بخوری ..... چون به هیچ‌وجه نمیشه به ابزارها و کنترلهای پیش‌فرض VB.NET اعتماد کرد.

با توجه به عرایض بنده ... به نظر شما اون مشکلی رو که تو پست 1# عنوان کردم ... حل میشه ؟ :متفکر:

Mani_rf
پنج شنبه 09 بهمن 1393, 10:54 صبح
این امکان وجود داره که با ارث بری از
DataGridViewColumn و یا اینترفیس های پایه ای که DataGridViewColumn ازشون ارث بری میکنن برای خودتون یک ستون سفارشی ایجاد کنید. باید ببینی انجام این کار تا چه میزان برای شما سود در بر داره. برای شروع این لینک (http://www.codemag.com/Article/0707061)رو نگاه کن.