PDA

View Full Version : سوال در مورد طراحی datagrid



bahar2008
شنبه 04 اسفند 1386, 09:13 صبح
سلام دوستان

من می خوام دیتا گریدی داشته باشم که عناوین سطرهایش از یک table رو نشون بده و عناوین ستون هایش را از یک table دیگه نشون بده.

من عناوین ستون ها رو میتونم نشون بدم ولی عناوین سطرها رو نمی دونم چه جوری باید نشون بدم :ناراحت::ناراحت:

ممنون می شم اگر کسی بتونه بگه که چه جوری و با چه دستوراتی می تونم این کار رو انجام بدم؟

یک سوال دیگه هم اینکه در یک دیتا گرید دیگه عناوین ستون هایم ثابت هست و خودم به صورت دستی وارد کردم و حالا می خوام عناوین سطرهایش رو از توی یکی از table های بانکم بیارم .

nasseritemp
شنبه 04 اسفند 1386, 16:37 عصر
منظورتون از عنوان برای سطر چیه؟ میشه مثال بزنید...

bahar2008
شنبه 04 اسفند 1386, 20:57 عصر
من میخوام بگم که در سال مثلا 81 چه مقدار کالا وجود داره
یک چیزی شبیه به این جدول می شه



سال81 سال82

مرغ 200 300
گوشت 300 500




که در اینجا (مرغ و گوشت) عناوین سطرها هستن که از بانکم که با sql هست میخوام بیاد

nasseritemp
شنبه 04 اسفند 1386, 22:27 عصر
شما میتونید برای عناوین سطرها یک Table جدا در نظر بگیرید و کلید اون رو تو جدولتون به عنوان کلید خارجی استفاده کنید. برای DataSource مربوط به Grid هم باید یک Query که حاصل Join دو Table هست رو طراحی کنید.

bahar2008
یک شنبه 05 اسفند 1386, 08:51 صبح
ممنونم از راهنماییتون دوست عزیز:قلب::قلب:
من این دو جدول را با هم join کردم ولی جواب join این دو جدول رو برام تو دیتا گرید قرار می ده
من می خوام که عناوین دیتا گریدم از بانک بیاد نه اسم فیلدهای توی بانکم :افسرده:

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

nasseritemp
یک شنبه 05 اسفند 1386, 15:58 عصر
خب شما فیلد مربوط به نام کالا رو هم به DataGrid تون Bind کنید.

bahar2008
دوشنبه 06 اسفند 1386, 09:34 صبح
چه جوری می تونم این کارو انجام بدم دوست عزیز؟
آخه در قسمت انتخاب data source دیتا گرید فقط یک دونه می شه data binding تعریف کرد که اونم من برای انتخاب table تعریف کردمش

nasseritemp
دوشنبه 06 اسفند 1386, 21:02 عصر
شما باید View حاصل از Join دو Table رو به عنوان DataSource در نظر بگیرید نه خود Table رو

bahar2008
سه شنبه 07 اسفند 1386, 09:32 صبح
اگر ممکنه کدش رو برام قرار بدبد
من در جایی خوندم که عمل join موارد مشترک دو table رو نشون می ده و حتما باید شرطی گذاشته بشه در حالی که من نمی خوام فقط مشترک ها نشون داده بشن .

ببینید دوست عزیز مثلا من یک table دارم به نام "کالا" که دراون فیلدهایی مثل نام کالا و شماره کالا و واحد اندازه گیری داره و یک table به نام "داده" که در اون فیلدهایی مثل نام داده و شماره داده داره و در قسمتی از برنامه این فیلدها با اطلاعاتی که کاربر وارد می کنه پر می شه .

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

اگر راه حلی به نظرتون میرسه لطفا کدش رو برام قرار بدید .

nasseritemp
سه شنبه 07 اسفند 1386, 16:14 عصر
متاسفانه متوجه منظورتون نشدم .
لطفا Tableهاتون رو بفرستید.

bahar2008
چهارشنبه 08 اسفند 1386, 09:56 صبح
بهتره به صورت مثال براتون توضیح بدم

table 1(kala) = name kala , id kala , vahede andazegiri
table 2 (data)= name data , id data , vahedeandazegiri
حالا کاربر اطلاعات خودش رو به این صورت وارد بانک می کنه

table1 (kala)= goosht , 1 , kg
morgh , 2 , kg


table 2 (data)= maghale , 5 , safhe
daftar , 8 , tedad

حالا من دیتا گریدی می خوام که morgh ,goosht عنوان ستونش باشه و maghale, daftar عنوان سطر این دیتاگرید باشه .

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

nasseritemp
چهارشنبه 08 اسفند 1386, 16:51 عصر
این کار چه مفهومی داره؟
رکوردهای Table1وTable2 از یک نوع هستند. جرا اونها رو تو یه جدول نمیریزید؟

bahar2008
چهارشنبه 08 اسفند 1386, 18:24 عصر
آخه می خوام عناوین سطرها و ستون هام اون ها باشن و خونه های دیتا گریدم از نوع check box باشه تا وقتی یکی از چک باکس ها رو کاربر تیک زد مقدار goosht از یک table دیگه خونده بشه و تقسیم بر مقدار maghale از یک table دیگه بشه .
یک جور برنامه محاسباتی هست . اون table ها رو هم به عنوان مثال گفتم .

nasseritemp
پنج شنبه 09 اسفند 1386, 11:42 صبح
لطفا بیشتر در مورد خود برنامه توضیح بدید. شاید راه حل بهتری پیدا کنیم.

bahar2008
جمعه 10 اسفند 1386, 14:01 عصر
ممنونم که به بحث من توجه دارید دوست عزیز

یک تیکه از برنامه به این صورت هست که دو عدد باید تقسیم بر هم شوند .
بهتره همون مثال قبلی رو براتون بنویسم
این دو عددی که قرار هست تقسیم بر هم بشوند در دو table جداگانه وجود دارند
table 1(setande) = name kala , id kala , meghdar
table 2 (data)= name data , id data , meghdar

حالا کاربر اطلاعات خودش رو به این صورت وارد بانک می کنه

table1 (setande)= goosht , 1 , 5
morgh , 2 , 8


table 2 (data)= maghale , 5 , safhe
daftar , 8 , tedad

حالا من می خوام دیتا گریدی داشته باشم که سلول های درون اون check box باشه و ردیف های اون رو فیلد name از table2 و ستون های اون رو فیلد name از table2 تشکیل بده تا کاربر بتونه اسامی موجود رو به راحتی مشاهده کنه و هرکدوم از اسامی نشون داده شده رو خواست تیک بزنه و به محض تیک خوردن برنامه فیلد meghdar از table 1 رو تقسیم بر فیلد meghdar از table 2 کند و نتیجه رو در بانک ذخیره کنه .
عکسش به صورت زیر می شه :
http://irapic.com/uploads/1204434963.jpg

که می خوام به جای ستانده 1 یا داده 1 اسم ستانده و داده از بانک مورد نظر بیاید.

bahar2008
یک شنبه 12 اسفند 1386, 09:30 صبح
یعنی هیچ کسی نمی دونه چه جوری می تونم دیتا گریدی مثل اون عکس بالا درست کنم؟ :ناراحت: :افسرده: :گریه:

Dariuosh
یک شنبه 12 اسفند 1386, 12:34 عصر
خوب چرا خودت پرش نمیکنی Manual منظورمه
یعنی ران تایم بنا به نیازت کالوم و رو اضافه کن بعدم مقدار دهی کن

bahar2008
یک شنبه 12 اسفند 1386, 19:49 عصر
آخه اطلاعات سطرها و ستون ها باید همونی باشه که کاربر زده
این یک نرم افزار هست و قراره بره دست مردم و من نمی تونم همیشه همه جا باشم که بتونم دستی واردش کنم

Dariuosh
دوشنبه 13 اسفند 1386, 07:50 صبح
آخه اطلاعات سطرها و ستون ها باید همونی باشه که کاربر زده
این یک نرم افزار هست و قراره بره دست مردم و من نمی تونم همیشه همه جا باشم که بتونم دستی واردش کنم
منظورم RunTimeهست نه اینکه ...

Dariuosh
دوشنبه 13 اسفند 1386, 09:46 صبح
تو این مثاله که گذاشتم سالو از تیبل Sales آوردم و اسم کتابارو از Titles

bahar2008
یک شنبه 19 اسفند 1386, 09:27 صبح
ممنونم از لطفت دوست عزیز
من کدهای شما رو به صورت زیر برای برنامم تغییر دادم و در برنامه قرار دادم



Me.DadeTableAdapter.Fill(Me.ProjectDataSet2.dade)
Me.setandeTableAdapter.Fill(Me.ProjectDataSet2.set ande)
WithMe.DataGridView1
For i As Int16 = 1 ToMe.dadeBindingSource.Count
.Columns.Add(New System.Windows.Forms.DataGridViewTextBoxColumn)
.Columns(i).Name = "namedade" & i
.Columns.Item(i).HeaderText = Me.dadeBindingSource.Current.row.itemarray(0)
Me.dadeBindingSource.MoveNext()
Next
For i As Int16 = 0 ToMe.setandeBindingSource.Count - 1
.Rows.Add()
.Rows(i).Cells(0).Value = Me.setandeBindingSource.Current.row.itemarray(1)
Me.setandeBindingSource.MoveNext()
Next
EndWith



ولی وقتی برنامه رو اجرا کردم با خطا مواجه شدم و صفحه مورد نظرم رو باز نکرد :ناراحت:
خطایش هم به صورت زیر هست :
http://irapic.com/uploads/1205071157.jpg

bahar2008
یک شنبه 19 اسفند 1386, 11:35 صبح
من یک دفعه دیگه اون کد رو گذاشتم در برنامم و سعی کردم که binding source هارو درست وصل کنم ولی باز هم با پیغام خطای جدیدی مواجه شدم که به صورت زیر هست :ناراحت:


http://irapic.com/uploads/1205094879.jpg

Dariuosh
دوشنبه 20 اسفند 1386, 08:41 صبح
هیچی رو نمیخواد بایند کنی فقط اول یه کالومن خالی درست کن بعدشم AllowUserAddRowو DeleteRowرو فالس کن
تویه Current.row.itemarray(0)هم شماره کالومنی رو که قراره استفاده کنی بزار

bahar2008
دوشنبه 20 اسفند 1386, 11:54 صبح
ممنونم از کمک همه دوستان خوبم :قلب::قلب::قلب::قلب::قلب::قلب:

ممنونم از کدی که در اختیارم گذاشتید داریوش عزیز :قلب::قلب::قلب::قلب::قلب:

واقعا این کد کمکم کرد تا بتونم با یک سری تغییرات به اون هدفی که دارم برسم :قلب::قلب::قلب::قلب: