PDA

View Full Version : گفتگو: سفارشي كردن DataGridView



anooshiran
جمعه 25 بهمن 1387, 20:51 عصر
1- DataGridView MergeCelss
سلام بر همه دوستان

در طي يكسالي كه افتخار عضويت و بهره وري از اين سايت راداشتم، ملاحظه نمودم كه سئوالات زيادي در ازتباط با DataGridView وسفارشي كردن آن يراي اكثر دوستان مطرح است.
بنايراين اين تاپيك را ايجاد كردم تا بتوانيم در اين ارتياط بحث كنيم و چنانچه پروژه يا كامپوننتي در اين ارتياط داريم در اينجا بگذاريم.

يراي شروع من كلاس Merge كردن افقي و عمودي DataGridView را با يك Demo ساده برايتان ميگذارم.

در ضمن اگر دوستان سئوال يا پيشنهادي براي بهتر شدن اين كلاس داشته باشند از مطرح شدن آن خوشحال خواهم شد.

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

anooshiran
شنبه 26 بهمن 1387, 15:02 عصر
از دوستاني كه اين كلاس را تست كرده اند ،‌خواهشمندم نظراتشان را بيان نمايند.
زيرا من در حال تكميل اين كلاس هستم و خوب است كه از نظرات و راهنماييهاي دوستان عزيز نيز بهره مند گردم.
با تشكر

kh_rouhi
شنبه 26 بهمن 1387, 18:45 عصر
سلام
خوبه لطفا ادامه بدین.

anooshiran
یک شنبه 27 بهمن 1387, 18:18 عصر
سلام دوستان

اين هم ورژن جديدتر dataGridViewMerge كه يك كلاس براي merge كردن RowHeaderCells به آن اضافه نموده ام.

اگر دوستاني مي دانند چگونه مي توان در هنگام اجرا در يك RectAngle تايپ كرد ، بدين صورت كه RectAngle را يه مثابه يك تكست باكس در نظر گرفت ، لطفا مرا راهنمايي فرمايند.

نظرات شما براي ارائه راه حل هاي بهتر بسيار كارساز است.

با تشكر

mina.net
سه شنبه 12 خرداد 1388, 17:05 عصر
دوست عزیز سلام
آخرین پستی که در این قسمت داشتید 27 بهمن87 هست.
اگه می شه این موضوع رو بیشتر باز کنید. dataGridViewMerge چی هست و چیکار می کنه و چطور می شه از اون استفاده کرد.
در ضمن ببخشید که فضولی کردم و این تاپیک رو بالا اورم.

anooshiran
چهارشنبه 13 خرداد 1388, 01:10 صبح
سلام دوست عزيز

من اين پروژه را شروع كردم تا بتوان به datagridview قابليتهاي excel را بخشيد.
مثلا در Excel ميتوان دو يا چند cell را با هم merge نمود.
dataGridViewMerge داراي امكانت زير است كه با مراجعه به demo آن مي توانيد مشاهده كنيد

امكان merge دو يا چند cell در يك row
امكان merge دو يا چند cell در يك column
امكان merge دو يا چند rowheader

البته خدمتتان عرض كنم كه من اين پروژه را بسيلر كاملتر از اين كرده و امكانت ديگري نظير

merge دو يا چند columnheader

merge چندين cell در سطرها و ستون ها
امكان merge به صورت runtime با استفاده از mouse مانند merge در excel
و امكانات زياد ديگري كه سعي دارم تا مشايهتي بين daragridview و excel ايجاد نمايم.

البته از آنجايي كه دوستان از اين پروژه استقبال نكردند . ديگر ورژن هاي جديدتر را در سايت ارائه ندادم.

امكان me
امكان

mina.net
پنج شنبه 14 خرداد 1388, 13:07 عصر
البته از آنجايي كه دوستان از اين پروژه استقبال نكردند . ديگر ورژن هاي جديدتر را در سايت ارائه ندادم.
امكان me
امكان

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

Hossis
پنج شنبه 29 مرداد 1388, 06:04 صبح
یک سؤال
چطور می شود کاری کرد که دیتا گرید با ردیف های خاصی از جدول بانک اطلاعاتی پر بشه یعنی با فیلد هائی پر بشود که نام خانوادگی آن مثلا "قلانی" هست؟؟

anooshiran
پنج شنبه 29 مرداد 1388, 06:19 صبح
یک سؤال
چطور می شود کاری کرد که دیتا گرید با ردیف های خاصی از جدول بانک اطلاعاتی پر بشه یعنی با فیلد هائی پر بشود که نام خانوادگی آن مثلا "قلانی" هست؟؟

سلام دوست عزيز

اين بستگي به select ي است كه از جدول مي كني

به مثال زير توجه كن شايد كمك كنه





Dim Server As String = "LocalHost"
Dim conString As String = _
"Server=" & Server & ";" & _
"Integrated Security=SSPI;" & _
"DataBase="
Dim sqlCon As New SqlClient.SqlConnection(conString)
Dim sqlDtAdp As New Data.SqlClient.SqlDataAdapter("", sqlCon)

Dim dSet As New DataSet
Dim database As String = "YourDatabaseName.dbo."
Dim tableName As String = "YourTableName"
Dim mySuggestion = "فلاني"
If sqlCon.State = ConnectionState.Closed Then sqlCon.Open()
With sqlDtAdp
.SelectCommand.CommandText = "SELECT * FROM " & database & tableName & _
" WHERE MyFild='" & mySuggestion & "'"
If dSet.Tables.Contains(tableName) Then dSet.Tables.Remove(tableName)
.Fill(dSet, tableName)
End With
sqlCon.Close()
DataGridView1.DataSource = dSet.Tables(tableName)

pourang_us
شنبه 31 مرداد 1388, 15:09 عصر
سلام و روز به خیر البته من این سوال رو قبلا تو اینجا مطرح کردم
http://barnamenevis.org/forum/showthread.php?t=147458
اما جواب خاصی که برای من قابل درک باشه نگرفتم اما احساس میکنم این جا جای مناسبی برای طرح دوباره اون باشه ببینید من میخوام دیتا گرید که روی فرم دارم به صورت زیر با کلیک کردن روی مثلا قسمت کد کالا

http://i39.tinypic.com/2q2fi9c.jpg
به شکل زیر در بیاد
http://i41.tinypic.com/5nsr39.jpg
که در این حالت قابلیت فیلتر و سورت را داشته باشم
من با VB.NET 2003 دارم مینویسم ضمنا و مهمتر از همه اینکه خیلی مبتدی هستم
ممنون از توجه شما

m_qghasemi
دوشنبه 02 شهریور 1388, 12:09 عصر
ضمن تشکر از شما دوست عزیز
چه جوری می تونم در سی شارپ از این کنترل استفاده کنم

scream666_ss
سه شنبه 03 شهریور 1388, 10:24 صبح
سلام دوستان

اين هم ورژن جديدتر dataGridViewMerge كه يك كلاس براي merge كردن RowHeaderCells به آن اضافه نموده ام.

اگر دوستاني مي دانند چگونه مي توان در هنگام اجرا در يك RectAngle تايپ كرد ، بدين صورت كه RectAngle را يه مثابه يك تكست باكس در نظر گرفت ، لطفا مرا راهنمايي فرمايند.

نظرات شما براي ارائه راه حل هاي بهتر بسيار كارساز است.

با تشكر


سلام دوست عزیز.

میگم این را با چه ورژنی نوشتید؟ آخر من در ۲۰۰۵ که اجرا می‌کنم error میدهد

با تشکر

john smithair
سه شنبه 03 شهریور 1388, 10:48 صبح
سلام خدمت دوستان عزیز.
چند وقت پيش تو یه برنامه دیدم که رديف های دیتا گريد یکی در میون به دو رنگ متفاوت بود.
مثلا ردیف اول سبز/دوم زرد/سوم سبز/چهارم زرد/ و.....
من این کار رو نمیتونم بکنم.لطفا اگر کسی میدونه چطور میشه اين کار رو کرد لطفا بهم کمک کنه.

anooshiran
سه شنبه 03 شهریور 1388, 11:28 صبح
سلام دوست عزيز از كدهاي زير استفاده كن



datagridview1.ColumnHeadersDefaultCellStyle.BackCo lor = Color.Green
datagridview1.AlternatingRowsDefaultCellStyle.Back Color = Color.Yellow

anooshiran
سه شنبه 03 شهریور 1388, 11:30 صبح
سلام دوست عزیز.

میگم این را با چه ورژنی نوشتید؟ آخر من در ۲۰۰۵ که اجرا می‌کنم error میدهد

با تشکر
سلام دوست عزيز

با 2005 نوشتم و error هم نداشت . لطف كن بگو چه error ي داده تا كنترل كنم

anooshiran
سه شنبه 03 شهریور 1388, 11:31 صبح
سلام دوست عزیز.

میگم این را با چه ورژنی نوشتید؟ آخر من در ۲۰۰۵ که اجرا می‌کنم error میدهد

با تشکر


سلام دوست عزيز

با 2005 نوشتم و كار مي كنه. لطف كن error را مطرح كن تا ببينم از چيه؟

anooshiran
سه شنبه 03 شهریور 1388, 11:32 صبح
ضمن تشکر از شما دوست عزیز


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

سلام دوست عزيز

اگر لازم داري بگو تا برات در اولين فرصت به سي شارپ تبديل كنم

scream666_ss
سه شنبه 03 شهریور 1388, 11:35 صبح
سلام دوست عزيز

با 2005 نوشتم و كار مي كنه. لطف كن error را مطرح كن تا ببينم از چيه؟

نمی‌تواند فایل Demo را پیدا کنه و این پیغام را میدهد
با تشکر
Error 1 Unable to create a manifest resource name for "ِDemo.resx". Could not find file 'D:\Saman\Tools\VS NET\DatagridView_Merge\DatagridViewMerge\ِDemo.vb '. DatagridViewMerge

Navid Asadi
سه شنبه 03 شهریور 1388, 12:27 عصر
سلام دوستان
من این سوال رو مطرح کرده بودم اما به نتیجه نرسیدم:
من می خوام هنگامی که با دکمه ها Up و Down توی Datagradview حرکت میکنم Position دیتا بیس تغییر کنه اما نمیتونم توKey Press این رو اعمال کنم چون up , ِخصد رو نمیشناسه ;کمکم کنید

scream666_ss
سه شنبه 03 شهریور 1388, 12:54 عصر
سلام دوستان
من این سوال رو مطرح کرده بودم اما به نتیجه نرسیدم:
من می خوام هنگامی که با دکمه ها Up و Down توی Datagradview حرکت میکنم Position دیتا بیس تغییر کنه اما نمیتونم توKey Press این رو اعمال کنم چون up , ِخصد رو نمیشناسه ;کمکم کنید

دوست عزیز من همانجا جوابت را نوشتم به هرحال این کدش است

dgv.Rows(dgv.CurrentRow.Index + 1).Selected() = True
dgv.CurrentCell = dgv.Rows(dgv.CurrentRow.Index + 1).Cells(0)

anooshiran
سه شنبه 03 شهریور 1388, 18:42 عصر
سلام دوستان
من این سوال رو مطرح کرده بودم اما به نتیجه نرسیدم:
من می خوام هنگامی که با دکمه ها Up و Down توی Datagradview حرکت میکنم Position دیتا بیس تغییر کنه اما نمیتونم توKey Press این رو اعمال کنم چون up , ِخصد رو نمیشناسه ;کمکم کنید

سلام دوست عزيز

اگر selectionmode را در حالت fullrowselect قرار بدي آنوقت مي تواني از KeyUp براي شناختن Up و Down استفاده كني

Navid Asadi
چهارشنبه 04 شهریور 1388, 09:20 صبح
اگر selectionmode را در حالت fullrowselect قرار بدي آنوقت مي تواني از KeyUp براي شناختن Up و Down استفاده كني

من این کار رو کردم...
لطفا یک مقدار بیشتر توضیح بدید...

Elyaswandi
چهارشنبه 04 شهریور 1388, 10:11 صبح
:افسرده:مممنون از راهنمايي هاتون خيلي مفيد بود
من يه مشكلي دارم وقتي ميخوام اطلاعات را از DataGridبه Excel بفرستم از كد زير استفاده ميكنم
Microsoft.Office.Interop.Excel.ApplicationClass excel = newApplicationClass();
excel.Application.Workbooks.Add(true);
int ColumnIndex = 0;
foreach (iGCol col in iGridAcc.Cols)
{
ColumnIndex++;
excel.Cells[1, ColumnIndex] = col.Text;
}
int rowIndex = 0;
foreach (iGRow row in iGridAcc.Rows)
{
rowIndex++;
ColumnIndex = 0;
foreach (DataColumn col in iGridAcc.Cols)
{
ColumnIndex++;
excel.Cells[rowIndex + 1, ColumnIndex] = row.Cells[col.ColumnName].Text;
}
}
excel.Visible = true;
Worksheet worksheet = (Worksheet)excel.ActiveSheet;
worksheet.Activate();

ولي از خط
excel.Application.Workbooks.Add(true);
ايراد ميگره

برنامه به هنگام كليك بر كليد پيام خطا ميدهد :
Old Format or invalid type library
بايد چكار كنم ..؟

ميشه راهنمايي كنيد

anooshiran
چهارشنبه 04 شهریور 1388, 12:33 عصر
:افسرده:مممنون از راهنمايي هاتون خيلي مفيد بود
من يه مشكلي دارم وقتي ميخوام اطلاعات را از DataGridبه Excel بفرستم از كد زير استفاده ميكنم
Microsoft.Office.Interop.Excel.ApplicationClass excel = newApplicationClass();
excel.Application.Workbooks.Add(true);
int ColumnIndex = 0;

ولي از خط
excel.Application.Workbooks.Add(true);
ايراد ميگره

برنامه به هنگام كليك بر كليد پيام خطا ميدهد :
Old Format or invalid type library
بايد چكار كنم ..؟

ميشه راهنمايي كنيد



سلام دوست عزيز

اين مطلب را چند جاي ديگر هم توضيح داده ام


اين error بدين علت حادث مي شود كه زبان كامپيوتر شما فارسي تنظيم شده .
حال براي حل اين مشكل 2 راه حل داريد

راه حل 1 - در regional and language setting در tag هاي regional option و advanced زبان را از fasri به english برگردانيد. كه البته اين راه حل منطقي براي فارسي زبانان نيست.

راه حل 2 - در بالاي كلاس يا فرمي كه دستورات انتقال به excel را نوشته ايد

كد زير را وارد كنيد



Imports System.Threading



سپس قبل از نوشت كدهاي انتقال به excel ، كدهاي زير را وارد كنيد


Dim CurrentCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCultu re
System.Threading.Thread.CurrentThread.CurrentCultu re = New System.Globalization.CultureInfo("en-US")





اين كد موقتا زبان ماشين را به english بر مي گرداند و زبان جاري را در متغير CurrentCI ذخيره مي كند

سپس در انتهاي انتقال به excel با كد زير مجددا زيان ماشين را به حالت قبل برگردانيد.



System.Threading.Thread.CurrentThread.CurrentCultu re = CurrentCI

شاپرک
دوشنبه 29 فروردین 1390, 11:10 صبح
سلام دوستان
اين هم ورژن جديدتر dataGridViewMerge كه يك كلاس براي merge كردن RowHeaderCells به آن اضافه نموده ام.
اگر دوستاني مي دانند چگونه مي توان در هنگام اجرا در يك RectAngle تايپ كرد ، بدين صورت كه RectAngle را يه مثابه يك تكست باكس در نظر گرفت ، لطفا مرا راهنمايي فرمايند.
نظرات شما براي ارائه راه حل هاي بهتر بسيار كارساز است.
با تشكر


چطور ميشه براي نمايش جداول Master/Detail از روش Merge شما استفاده كرد؟

nowar1352
یک شنبه 02 مرداد 1390, 00:38 صبح
با تشكر سلام دوست عزيز آيا تمپليت هاي آماده براي DatagridView وجود داره يا نه .براي من بيشتر رنگ آميزي آن مهم است