ورود

View Full Version : سوال: انتخاب یک سطر از datagrid نمایش در datagrid دیگر



yekta99
پنج شنبه 13 مرداد 1390, 16:01 عصر
سلام

من می خوام کاربر با انتخاب یک سطر از datagrid ، اطلاعات اون سطر توی یه دیتاگرید دیگه نمایش داده بشه ، بعد توی جدول ذخیرش کنم .

من برای انتقال به دیتا گرید دیگه از کد زیر استفاده کردم و هرجور تغییرش دادم کار نکرد ، اگه امکان داره راهنمایی کنید مشکل کد چیه ؟




UnivDataDataContext data = new UnivDataDataContext()

Course selected = dataGrid1.SelectedItem as Course;
if (selected == null)
MessageBox.Show("");
else
{
dataGrid2.ItemsSource = Convert.ToString(selected);
data.Courses.InsertOnSubmit(selected);
data.SubmitChanges();
}

قسمت selected درسته ولی توی دیتا گرید ستون های خالی رو نشون میده

مهدی فرزاد
پنج شنبه 13 مرداد 1390, 18:53 عصر
سلام
من یک مثال براتون میگذارم
DataClasses1DataContext db = new DataClasses1DataContext();
ListCollectionView view;
List<Table_Personel> l_Personal = new List<Table_Personel>();
public MainWindow()
{

InitializeComponent();
this.dataGrid1.ItemsSource = db.Table_Personels;
this.dataGrid2.ItemsSource = l_Personal;
this.view = (ListCollectionView)(CollectionViewSource.GetDefau ltView(this.dataGrid2.ItemsSource));
}

private void button1_Click(object sender, RoutedEventArgs e)
{
this.view.AddNewItem(this.dataGrid1.SelectedItem);
this.view.CommitNew();

}

yekta99
پنج شنبه 13 مرداد 1390, 19:31 عصر
ممنون از توجهتون

تا اینجای کار درست شد ،
ولی اگه الان بخوام اطلاعات دیتا گرید دومی رو توی یه جدول ذخیره کنم ، باید چیکار کنم ؟

الان با اضافه کردن این کدها یه خورده گیج شدم باید چیکار کنم ؟

مهدی فرزاد
جمعه 14 مرداد 1390, 00:29 صبح
سلام
برای ذخیره کردن اطلاعات درون گرید دوم یک تغییر کوچیک اول باید در کد بالا بدید
بجای کد زیر
this.view = (ListCollectionView)(CollectionViewSource.GetDefau ltView(this.dataGrid2.ItemsSource));
بنویسید
this.view = (ListCollectionView)(CollectionViewSource.GetDefau ltView(l_Personal));

اینجوری هر آیتمی که منتقل میشه در لیست هم ذخیره میشه
حالا با دو کد ساده زیر همه چیز ذخیره میشه فرض کنید میخواهیم در جدول Table_Personel ذخیره کنیم
db.Table_Personels.InsertAllOnSubmit(l_Personal);
db.SubmitChanges();

yekta99
جمعه 14 مرداد 1390, 09:05 صبح
اینجوری درست نشد ، باز ارور میده ، البته می خوام داخل یه جدول جدید ذخیره کنم ، ولی در هردو صورت چه به جدول قبلی چه جدول جدید ارور میده

مهدی فرزاد
شنبه 15 مرداد 1390, 00:44 صبح
سلام
خوب ببینید شما وقتی میخواید اطلاعات رو در یک جدول دیگه ذخیره کنید باید لیستی که به دیتا گرید وصل میکنید از نوع جدول دوم باشه(در این مثال Table1 جدول دومی هست که اسم فیلد هاش با جدول Table_Personel فرق داره)
List<Table1> l_Personal = new List<Table1>();
و هم چنین چون فیلد های جدول ها ممکنه مثل هم نباشه پس بهتره به شکل زیر عمل کنید

Table1 t = new Table1();
t.FirstName = (this.dataGrid1.SelectedItem as Table_Personel).FName;
t.LastName = (this.dataGrid1.SelectedItem as Table_Personel).LName;
this.view.AddNewItem(t);
this.view.CommitNew();

هم چنین کد ذخیره کردن رو
db.Table1s.InsertAllOnSubmit(l_Personal);
db.SubmitChanges();
db = new DataClasses1DataContext();
this.l_Personal.Clear();
this.view.Refresh();
من یک بار دیگه کد ها رو کامل برای شما میگذارم
DataClasses1DataContext db = new DataClasses1DataContext();
ListCollectionView view;
List<Table1> l_Personal = new List<Table1>();
public MainWindow()
{

InitializeComponent();
this.dataGrid1.ItemsSource = db.Table_Personels;
this.dataGrid2.ItemsSource = l_Personal;
this.view = (ListCollectionView)(CollectionViewSource.GetDefau ltView(l_Personal));
}

private void button1_Click(object sender, RoutedEventArgs e)
{
Table1 t = new Table1();
t.FirstName = (this.dataGrid1.SelectedItem as Table_Personel).FName;
t.LastName = (this.dataGrid1.SelectedItem as Table_Personel).LName;
this.view.AddNewItem(t);
this.view.CommitNew();
}

private void button2_Click(object sender, RoutedEventArgs e)
{
db.Table1s.InsertAllOnSubmit(l_Personal);
db.SubmitChanges();
db = new DataClasses1DataContext();
this.l_Personal.Clear();
this.view.Refresh();
}
و همچینین یک مثال ضمیمه میکنم

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

yekta99
شنبه 15 مرداد 1390, 21:38 عصر
سلام مجدد
به لطف شما (Mehdi550u) تا اینجا کارم راه افتاده ، با استفاده از همین کدها به چیزی که می خواستم رسیدم و تونستم داده های گرید رو توی جدول ذخیره کنم ، ولی نمیدونم چرا توی مثالی که گذاشتید ، داده ها توی جدول ذخیره نمی شدند .

یه سوال دیگه :
چطوری می تونم داده های یک ستون رو جمع کنم و توی یه textbox نمایش بدم ؟ البته سرچ کردم ولی چون سوال من خیلی ابتدایی بود چیزی پیدا نکردم ، فقط چند مورد با vb بود .

mmd2009
شنبه 15 مرداد 1390, 23:04 عصر
با سلام


چطوری می تونم داده های یک ستون رو جمع کنم و توی یه textbox نمایش بدم ؟ البته سرچ کردم ولی چون سوال من خیلی ابتدایی بود چیزی پیدا نکردم ، فقط چند مورد با vb بود . با اجازه اقا مهدی گل
ببنیدی دوست عزیز شاید دلیلش این باشه که چیزی ندید چون اکثرا وقتی با Linq کار میکنن دیگه نیازی ندارن یک حلقه بذارن و داده ها رو یکی یکی جمع بکنن ( البته اونطوری که از مفهموم سوال شما متوجه شدم) بهترین را همون Sum خود linq هست که در موردش سرچ بکنید بیشتر به نتیجه میرسید و نیازی هم نیست خودتون رو درگیر دیتاگرید بکنید

=====

ویرایش :

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

پ ن : البته امیدوارم اونچیزی باشه که مد نظر شما بود

مهدی فرزاد
یک شنبه 16 مرداد 1390, 10:36 صبح
سلام مجدد
به لطف شما (Mehdi550u) تا اینجا کارم راه افتاده ، با استفاده از همین کدها به چیزی که می خواستم رسیدم و تونستم داده های گرید رو توی جدول ذخیره کنم ، ولی نمیدونم چرا توی مثالی که گذاشتید ، داده ها توی جدول ذخیره نمی شدند .


داده ها ذخیره میشد ولی با هر بار اجرای مجدد برنامه از درون محیط VS باعث میشد دیتابیس قبلی به جای دیتابیس جدید در پوشه Debug کپی بشه ( به تنظیمات دیتابیس Add شده در برنامه رجو کنید روی اون کلیک راست کنی برای گزینه Copy To Output Direct.. T گزینه Copy if Newer رو انتخاب کنید

yekta99
یک شنبه 16 مرداد 1390, 16:27 عصر
این مثالی که در زیر هست برات گذاشتم که یک ستون بهش اضافه کردم به همون مقال اقا مهدی و ساده ترین راه ممکن برای جمع یک ستون رو هم توش برات نوشتم

پ ن : البته امیدوارم اونچیزی باشه که مد نظر شما بود



سلام ، ممنون از لطف شما ،
من می خوام با اضافه شدن هر سطر به دیتا گرید دوم ، مثلا مقدار price مربوط به فیلدهای آن دیتاگرید ،با هر بار اضافه شدن یک سطر به طور خودکار با مقدار توی textbox جمع بشه و به یه حدی که رسید به کاربر نمایش بده که دیگه بیشتر از این نمیتونه انتخاب کنه، من هرجور تغییرش دادم نتونستم درستش کنم ، فکر می کنم باید از یه حلقه استفاده بشه و توی page_load نوشته بشه ،
من مثال هایی که توی سایت با c# بود رو دیدم ولی نتونستم توی برنامه ازشون استفاده کنم ، ممنون می شم اگه راهنمایی کنید .

yekta99
یک شنبه 16 مرداد 1390, 16:30 عصر
داده ها ذخیره میشد ولی با هر بار اجرای مجدد برنامه از درون محیط VS باعث میشد دیتابیس قبلی به جای دیتابیس جدید در پوشه Debug کپی بشه ( به تنظیمات دیتابیس Add شده در برنامه رجو کنید روی اون کلیک راست کنی برای گزینه Copy To Output Direct.. T گزینه Copy if Newer رو انتخاب کنید


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

مهدی فرزاد
دوشنبه 17 مرداد 1390, 08:18 صبح
ذخیره میکنه
شما چجوری چک کردید که ذخیره نمیکنه
این عکس از اطاعات ذخیره شده
73467

شما در vs تب server explorer رو انتخاب کنید اونجا کانکشن جدید به فایل دیتابیس در پوشه Debug برقرار کنید بعد ذخیره که کردید برید اونجا و اطلاعات ذخیره شده رو ببینید
من این عکس رو از اونجا گرفتم

yekta99
چهارشنبه 19 مرداد 1390, 09:36 صبح
من می خوام با اضافه شدن هر سطر به دیتا گرید دوم ، مثلا مقدار price مربوط به فیلدهای آن دیتاگرید ،با هر بار اضافه شدن یک سطر به طور خودکار با مقدار توی textbox جمع بشه و به یه حدی که رسید به کاربر نمایش بده که دیگه بیشتر از این نمیتونه انتخاب کنه، من هرجور تغییرش دادم نتونستم درستش کنم ، فکر می کنم باید از یه حلقه استفاده بشه و توی page_load نوشته بشه ،
من مثال هایی که توی سایت با c# بود رو دیدم ولی نتونستم توی برنامه ازشون استفاده کنم ، ممنون می شم اگه راهنمایی کنید .

در مورد جمع مقادیر یک ستون از دیتاگریدی که اطلاعات رو موقتا ذخیره می کنه ، اگه کسی می دونه راهنمایی کنه