View Full Version : سوال: ComboBox در Datagridview
Shahab_H
پنج شنبه 01 مهر 1389, 19:25 عصر
با سلام
اول از همه که تو کنترل های WPF دیتا گرید ویو رو نمی بینم! باید از کجا اضافه ش کنم؟
چه طور میشه یک ستون به صورت Combobox باشه و با اضافه شدن هر سطر به ستون مورد نظر Combobox اضافه شه؟
mahdi7s
جمعه 02 مهر 1389, 11:20 صبح
1)اگر از دات نت 4 استفاده می کنید کنترلر DataGrid برای اینکار موجود است اگر از نسخه ی
پایین تر استفاده می کنید می توانید این کارو با GridView انجام دهید یا WPF Toolkit را در code project برای نسخه 3.5 دانلود کنید و کنترل هایی از جمله DataGrid استفاده کنید
2)در GridView یا در DataGrid ؟(به هر حال در هر دو با کمی تغییر باید یه ستون template ایجاد کنید)
هر سطر که به جدول اضافه می شود به comboBox اضافه شود؟!(در این صورت چه نیازی به جدول دارید؟)
سوالاتتان را واضح بپرسید تا خودتان سریع تر به جواب برسید ....
Shahab_H
شنبه 03 مهر 1389, 18:07 عصر
با سلام
من میخوام که مثل Datagridview تو Windowsform یه دیتا گرید ویو داشته باشم که جای این که همه ی ستون هاش حالت textbox داشته باشن یکیش combobox باشه یعنی کاربر محتویات اون ستون رو از تو Combobox استفاده کنه.
دیروز دوباره گشتم دیدم Datagrid داره و اتفاقا نوع ستون رو میشه combobox تعریف کرد اما 2 تا مشکل جدید دارم!
1- مثل ویندوز فرم وقتی برنامه رو لود می کنم در Datagird هیچ row ای وجود نداره و نمیشه بهش هم اضافه کرد تابعی مثل dg.rows.add() هم نداره! نمی دونم چطوری میشه بهش Row اضافه کرد فقط در صورتی که به دیتا بیس وصل میشه خودش row میسازه و پرشمی کنه اما من برای یکی از Datagrid ها نیاز دارم که کاربر خودش دستی پرش کنه
2- میخوام در صورتی که Item مورد نظر کاربر در Combobox دیتاگرید وجود نداشت خودش بتونه دستی وارد کنه! باید چی کار کنم؟
منون از توجهتون
mahdi7s
شنبه 03 مهر 1389, 19:00 عصر
1- مثل ویندوز فرم وقتی برنامه رو لود می کنم در Datagird هیچ row ای وجود نداره و نمیشه بهش هم اضافه کرد تابعی مثل dg.rows.add() هم نداره! نمی دونم چطوری میشه بهش Row اضافه کرد فقط در صورتی که به دیتا بیس وصل میشه خودش row میسازه و پرشمی کنه اما من برای یکی از Datagrid ها نیاز دارم که کاربر خودش دستی پرش کنه
2- میخوام در صورتی که Item مورد نظر کاربر در Combobox دیتاگرید وجود نداشت خودش بتونه دستی وارد کنه! باید چی کار کنم؟
1)چند روز پیش یکی از دوستان مشکل مشابهی با دیتاگرید در ویندوز فرم داشت(البته در فروم پی سی) جواب بسیار ساده است کنترل هایی که مخصوصا برای نمایش اطلاعات و داده ها ساخته شده اند بهتر است برای نمایش به اطلاعات و داده ها بایند شوند(که عمل بایند کردن به صورت بالقوه ای در WPF وجود دارد) اما کنترل دستی خصیصه های کنترل برای نمایش هم امکان پذیر است.
حالا این اطلاعات بایند شده نباید حتما از دیتابیس واکشی شوند
این اطلاعات می توانند هر چیزی باشند(مثلا یک لیست از نوع رشته)
خواستم خودم کدی بزارم دیدم سمپل خود msdn خوب است که می توانید آن را در لینک زیر ببینید:
http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.aspx
2)می توانید یک تکست باکس و دکمه بر روی فرم قرار بدید تا اطلاعات جدیدی که می خواهد وارد کند و به لیست بایند شده comboBox اضافه اش کند
موفق باشید
Shahab_H
یک شنبه 04 مهر 1389, 20:37 عصر
ممنون از پاسختون
اگر ممکنه نحوه ی نشون دادن محتویات لیست در دیتاگرید رو هم توضیح بدین
دیتا بایند هم بلد نیستم:خجالت:
Shahab_H
یک شنبه 04 مهر 1389, 23:12 عصر
یک بار چنین دستوری رو استفاده کردم
dgw.ItemSource=mylist;
درست جواب داد و اطلاعات لیست رو نشون دا ولی دیگه هر چی ازش استفاده می کنم 1 یا دو سطر خالی نشون داده میشه ولی لیست رو چک می کنم توش اطلاعات داره!
mahdi7s
سه شنبه 06 مهر 1389, 13:29 عصر
کدتان را بذارید...
Shahab_H
دوشنبه 12 مهر 1389, 14:03 عصر
مثلا
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Accounting
{
class Factor_Item
{
private string name;
private string type;
public Factor_Item (string Name,string Type)
{
name=Name;
type=Type;
}
}
}
و
private void Window_Loaded(object sender, RoutedEventArgs e)
{
List<Factor_Item> t = new List<Factor_Item>();
t.Add(new Factor_Item("shahab", "helmi"));
dataGrid_Factor.ItemsSource = t;
}
این تصویری که نشون میده تو لیست آیتم وجود داره:
http://img64.imageshack.us/img64/4695/codek.jpg
و اینم datagrid که اون بخش سیاه یه سطر خالی اضافه شده ست!
http://img840.imageshack.us/img840/1667/datagrid.jpg
کدهای مختلفی مثل datagrid.items.add() و اضافه کردن دستی ستون و ... رو انجام دادم نتیجه همینه!
ولی وقتی از جدول دیتا بیس و نتیجه ی Stored proc استفاده می کنم مشکلی نیست!
mahdi7s
سه شنبه 13 مهر 1389, 11:12 صبح
سلام (ببخشید کمی دیر شد)
معلوم چیزی نشان نمی دهد! اصلا کلاس Factor_Item شما هیچ خصیصه ی عمومی ندارد!
حداقل کار این است که آن کلاس را به شکل زیر تغییر بدهد:
class Factor_Item
{
public string name { get; private set; }
public string type { get; private set; }
public Factor_Item (string Name,string Type)
{
name=Name;
type=Type;
}
}
موفق باشید
Shahab_H
سه شنبه 13 مهر 1389, 20:41 عصر
خییییییییییییییییییییلی ممنون از لطفتون :لبخندساده:
اول از datagrid.items.add() استفاده کردم ولی مشکل قبلی حل نشد ولی آبجکت ها رو تو لیست ریختم و از datagrid.itemsource=list استفاده کردم و مشکل حل شد.
فقط الان ستون های جدول اسم ندارن! چطوری میشه اسم دار شه خودش بر اساس پراپرتی های آبجکت اسم بده به ستون ها؟
mahdi7s
سه شنبه 13 مهر 1389, 21:45 عصر
خصیصه AutoGenerateColumns دیتاگرید را True کنید...
Shahab_H
سه شنبه 13 مهر 1389, 22:11 عصر
ببخشید از اول true بود ولی رنگ پس ستون ها و foreground color یکی بود دیده نمیشد:خجالت:
الان مثلا اسم ها name و type و price و ... هستن چطوری می تونم جاش اسم های فارسی رو جایگزین کنم؟
mahdi7s
پنج شنبه 15 مهر 1389, 15:18 عصر
در WPF برای ربط دادن دیتاها با ظاهر باید از Binding استفاده شود !
برای ربط دادن خصیصه از لیست بایند شده به ستونی از DataGrid هم باید کدی شبیه زیر بنویسید:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="نام" Binding="{Binding name}"/>
<DataGridTextColumn Header="نوع" Binding="{Binding type}" />
</DataGrid.Columns>
</DataGrid>
بهتر است کمی وقت بگذارید و تا Binding را بهتر درک کنید(چیزهای جالبی دارد ...)
موفق باشید
Shahab_H
شنبه 17 مهر 1389, 13:17 عصر
ممنون از راهنماییتون. قصد دارم یاد بگیرم ولی در حال حاضر وقت ندارم:ناراحت:
mahdi7s
شنبه 17 مهر 1389, 13:31 عصر
حالا دیگه باید AutoGenerateColumns را false کنید ...
mehrsa_fr
شنبه 24 مهر 1389, 10:57 صبح
میشه اینو به یه dataset وصل کرد من یه table دارم که میخوام هر کدوم از ردیفاشو تو یکی از item های combobox باشه
mahdi7s
شنبه 24 مهر 1389, 18:20 عصر
بله
می بایست برای ایتم های ComboBox یه Template خاص تعریف کنید بعدشم آن DataTable را به Combox بایند کنید
mehrsa_fr
شنبه 24 مهر 1389, 18:50 عصر
میشه نمونه کدی بزارید؟
و حتما binding ها را باید از xaml انجام داد
mahdi7s
یک شنبه 25 مهر 1389, 09:53 صبح
دارم سمپلی آماده می کنم
--
بهتر است Binding در XAML انجام شود (اصلا تا آنجایی که می توانید سعی کنید از XAML استفاده کنید!)
mahdi7s
یک شنبه 25 مهر 1389, 11:13 صبح
http://up.iranblog.com/Files73/69e4955cb6334c26bbf8.rar
موفق باشید
Shahab_H
یک شنبه 25 مهر 1389, 22:04 عصر
با سلام
چطور میشه یک ستون اضافه کرد که توش تصویر یک ضربدر (از همین قرمز ها که به مفهوم remove) هست گذاشت به طوری که با اضافه شدن هر سطر در این ستون ضربدر قرار بگیره؟ البته به کلاسم یک خصیصه ی رشته ای اضافه کردم که در ستون مورد نظر عبارت حذف رو می نویسه ولی نمی دونم چطور میشه تصویر گذاشت؟
2- چطور می تونم بگم که با کلیک روی همین نوشته ی حذف یا تصویر ضربدر آیتم مورد نظر از لیست مربوطه حذف بشه تا در دیتا گرید هم نشون داده نشه؟
اول به فکرم رسید آیتمی که شمارش با شماره سطر برابره پاک شه ولی مشکل اینه که کاربر می تونه ترتیب سورت رودر دیتاگرید عوض کنه و تناظر آیتم ها در دیتا گرید ولیست از بین بره
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.