مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

yasser93

عضویت از 1395/06/07

بدست آوردن مقدار یک سلول از DataGrid در WPF & Entity-FramWork

  • یکشنبه 7 شهریور 1395
  • 22:39
تشکر میکنم
سلام. من دیتا گریدمو با استفاده از کد زیر پر میکنم

 


    var Qselect = (from w in db.Workshops
                               join wt in db.WorkshopTypes on w.WorkshopTypeId equals wt.WorkshopTypeId
                               join tt in db.TransferTypes on w.WorkshopTransfer equals tt.TransferTypeId
                               where w.WorkshopDate.Contains("1395/05/01")
                               orderby w.WorkshopDate
                               select new
                               {
                                   WorkshopId = w.WorkshopId,
                                   WorkshopDate = w.WorkshopDate,
                                   WorkshopTypeId = wt.WorkshopTypeName,
                                   WorkshopDetails = w.WorkshopDetails,
                                   FusionId = w.FusionId,
                                   WorkshopTransfer = tt.TransferTypeName,
                                   WorkshopWeight = w.WorkshopWeight
                               }).Take(10);
                grdWorkshop.ItemsSource = Qselect.ToList();

 

و دیتا گرید با این کد ساخته شده


    <DataGrid x:Name="grdWorkshop" AutoGenerateColumns="False" >
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="id" Width="50" Binding="{Binding WorkshopId}" />
                                    <DataGridTextColumn Header="Date" Width="140" Binding="{Binding WorkshopDate }"/>
                                    <DataGridTextColumn Header="Type" Width="110" Binding="{Binding WorkshopTypeId }"/>
                                    <DataGridTextColumn Header="Detail" Width="220" Binding="{Binding WorkshopDetails }"/>
                                    <DataGridTextColumn Header="Series" Width="80" Binding="{Binding FusionId }"/>
                                    <DataGridTextColumn Header="Transfer" Width="130" Binding="{Binding WorkshopTransfer }"/>
                                    <DataGridTextColumn Header="Weight" Width="100" Binding="{Binding WorkshopWeight }"/>
                                </DataGrid.Columns>
                                <DataGrid.ContextMenu>
                                    <ContextMenu >
                                        <MenuItem Header="Add" Click="AddWorkshopItem" />
                                        <MenuItem Header="Edit" Click="EditWorkshopItem" />
                                        <MenuItem Header="Delete" Click="DeleteWorkshopItem" />
                                    </ContextMenu>
                                </DataGrid.ContextMenu>
                            </DataGrid>

 

حالا من میخوام با استفاده از context menu حذف و ویرایش کنم که ویرایش از طریق یه پنجره دیگه انجام میشه. برای این عملیات نیاز به به دسترسی به فیلد های سطر انتخابی هستم ولی نمیدونم چطوری اینکارو بکنم.
با این کد دیدم که انجام میشه اما فکر کنم چون دیتاگرید من حاصل جوین چندتا جدوله خطا میده
   int id = (grdWorkshop.SelectedItem as Workshop).WorkshopId;

 

از WPF و تکنولوژی EF 6.0 و ویژوال 2013 استفاده میکنم.
ممنون میشم اگه راهنمایی کنید.

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • دوشنبه 8 شهریور 1395
  • 14:47

لیستی که داخل گرید پر کردید رو لیستی از یک کلاس بسازید :

List<MyWorkshops> Qselect = (from w in db.Workshops
                           join wt in db.WorkshopTypes on w.WorkshopTypeId equals wt.WorkshopTypeId
                           join tt in db.TransferTypes on w.WorkshopTransfer equals tt.TransferTypeId
                           where w.WorkshopDate.Contains("1395/05/01")
                           orderby w.WorkshopDate
                           select new MyWorkshops
                           {
                               WorkshopId = w.WorkshopId,
                               WorkshopDate = w.WorkshopDate,
                               WorkshopTypeId = wt.WorkshopTypeName,
                               WorkshopDetails = w.WorkshopDetails,
                               FusionId = w.FusionId,
                               WorkshopTransfer = tt.TransferTypeName,
                               WorkshopWeight = w.WorkshopWeight
                           }).Take(10);
            grdWorkshop.ItemsSource = Qselect.ToList();

و سپس برای بدست آوردن ردیف انتخاب شده گرید SelectedItem را به کلاس MyWorkshops تبدیل کنید و ID را بدست بیاورید :

	
int id = (grdWorkshop.SelectedItem as MyWorkshops).WorkshopId;

 

کاربر سایت

yasser93

عضویت از 1395/06/07

  • دوشنبه 8 شهریور 1395
  • 18:24

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

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

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

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)