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

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

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

اضافه کردن کلید های حذف و ادیت در کنترل گرید telerik

  • دوشنبه 24 خرداد 1395
  • 15:34
تشکر میکنم

سلام

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

        <telerik:RadGridView x:Name="RadGrid" IsReadOnly="True" FlowDirection ="RightToLeft"    
            CanUserFreezeColumns="False" CanUserResizeColumns="False"
         ShowGroupPanel ="False"  AutoGenerateColumns ="False" Margin="0,0,0,-29" telerik:StyleManager.Theme="Office_Blue" Cursor="Hand" CanUserInsertRows="False" CanUserDeleteRows="False" Grid.ColumnSpan="2" Grid.RowSpan="4" SelectionChanged="RadGrid_SelectionChanged"  >
                    <telerik:RadGridView.Columns>
                        <telerik:GridViewDataColumn DataMemberBinding="{Binding SchoolID}"
                                    Header="کد" MaxWidth ="50" MinWidth ="50" TextAlignment="Right" />
                        <telerik:GridViewDataColumn DataMemberBinding="{Binding SchoolTitle}"
                                    Header="عنوان مدرسه"  MaxWidth ="200" MinWidth ="100" />
                        <telerik:GridViewDataColumn DataMemberBinding="{Binding SchoolPhone}"
                                    Header="تلفن" MaxWidth ="100" MinWidth ="100" />
                        <telerik:GridViewColumn Header="دستورات" IsFilterable="False" >
                           
                            <telerik:GridViewColumn.CellTemplate>
                                <DataTemplate>

                                    <Button x:Name="btnDelete" Width="50" Height="22" Content="حذف" Click="DeleteData"  ></Button>
                                   

                                </DataTemplate>
                            </telerik:GridViewColumn.CellTemplate>
                        </telerik:GridViewColumn>
                        <telerik:GridViewDataColumn
                            UniqueName="SchoolID" FooterTextAlignment="Left" IsReorderable="False" IsVisible="False" IsFilterable="False"  DataMemberBinding="{Binding SchoolID}">
                        </telerik:GridViewDataColumn>
                    </telerik:RadGridView.Columns>
                </telerik:RadGridView>

 

و در  Codebehind :

 private void RadGrid_SelectionChanged(object sender, SelectionChangeEventArgs e)
        {
            SchoolID = this.RadGrid.SelectedItems.OfType<Schools>().Select(i => i.SchoolID).FirstOrDefault();
        }

ولی فقط زمانی که یک رکورد مارک می شود کد برنامه درست عمل میکند.

مثلا اگر رکورد شماره 10 در گرید select شده باشد و من روی دکمه حذف رکورد شماره 4 کلیک کنم رکورد شماره 10 حذف میشود.

چطور شماره رکورد کلیک شده توسط موس را بدست بیاورم؟

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

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

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

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

  • دوشنبه 24 خرداد 1395
  • 16:36

چون شما از رویداد SelectionChanged استفاده کردید برای همین زمانی که یک ردیف را انتخاب میکنید مقدار SchoolID شما پر میشود . برای اینکه هر دکمه در هر ردیف بتواند رکورد جداگانه خود را حدف کند می توانید از Command ها استفاده کنید و مقدار ID را به parameter آن دکمه اختصاص دهید . به مثال زیر توجه کنید :

در بالای صفحه یک Command تعریف میکنیم :

<Window.CommandBindings>
        <CommandBinding Command="Delete"  Executed="CommandBinding_OnExecuted"></CommandBinding>
</Window.CommandBindings>

Command تعریف شده را به دکمه مورد نظر وصل میکنیم (نام Command ما Delete است) و SchoolID را به عنوان CommandParameter پاس میدهیم :

<telerik:GridViewColumn Header="دستورات" IsFilterable="False" >
     <telerik:GridViewColumn.CellTemplate>
     <DataTemplate>
     <Button x:Name="btnDelete" Width="50" Height="22" Content="حذف" Command="Delete" CommandParameter="{Binding Path=SchoolID}" ></Button>
    </DataTemplate>
    </telerik:GridViewColumn.CellTemplate>
</telerik:GridViewColumn>

حال در Code رویداد Exacute را مینویسیم :

private void CommandBinding_OnExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show(e.Parameter.ToString());
        }

 

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • سه شنبه 25 خرداد 1395
  • 13:55

بسیار ممنونم

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

ممنون میشم در اون مورد هم راهنمایی کنید

ممنونم

<telerik:GridViewColumn Header="دستورات" IsFilterable="False" >
     <telerik:GridViewColumn.CellTemplate>
     <DataTemplate>
     <Button x:Name="btnDelete" Width="50" Height="22" Content="حذف" Command="Delete" CommandParameter="{Binding Path=SchoolID}" ></Button>
    <Button x:Name="btnEdit" Width="50" Height="22" Content="ویرایش" Command="Edit" CommandParameter="{Binding Path=SchoolID}" ></Button>   
   </DataTemplate>
    </telerik:GridViewColumn.CellTemplate>
</telerik:GridViewColumn>
کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • سه شنبه 25 خرداد 1395
  • 13:56
  <DataTemplate>
     <Button x:Name="btnDelete" Width="50" Height="22" Content="حذف" Command="Delete" CommandParameter="{Binding Path=SchoolID}" ></Button>
    <Button x:Name="btnEdit" Width="50" Height="22" Content="ویرایش" Command="Edit" CommandParameter="{Binding Path=SchoolID}" ></Button>   
   </DataTemplate>

 

کاربر سایت

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

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

  • سه شنبه 25 خرداد 1395
  • 15:52

شما باید برای Command Edit هم یک CommandBinding ثبت کنید که OnExacute جداگانه داشته باشد :

<Window.CommandBindings>
        <CommandBinding Command="Delete"  Executed="CommandBinding_OnExecuted"></CommandBinding>
        <CommandBinding Command="Edit"  Executed="EditCommandBinding_OnExecuted"></CommandBinding>
</Window.CommandBindings>

 

کاربر سایت

ebrahimi6357

عضویت از 1392/07/05

  • چهارشنبه 26 خرداد 1395
  • 14:13

سلام

ممنونم

انجام دادم

کد داخل گرید این شد:

                                <DataTemplate>
                                    <Button x:Name="btnDelete" Width="50" Height="22" Content="حذف" Command="Delete" CommandParameter="{Binding Path=SchoolID}"  Tag ="{Binding SchoolID}"  Click ="CommandBinding_OnExecuted" ></Button>
                                    <Button x:Name="btnEdit" Width="50" Height="22" Content="ویرایش" Command="Edit" CommandParameter="{Binding Path=SchoolID}"  Tag ="{Binding SchoolID}"  Click ="EditCommandBinding_OnExecuted" ></Button>



                                   
                                </DataTemplate>

و کد بالای صفحه:

 <Window.CommandBindings>
        <CommandBinding Command="Delete"  Executed="CommandBinding_OnExecuted"></CommandBinding>
        <CommandBinding Command="Edit"  Executed="EditCommandBinding_OnExecuted"></CommandBinding>
    </Window.CommandBindings>

 

اما 4 تا ارور داده که سر در نمیارم:

Severity    Code    Description    Project    File    Line
Error        Invalid value for property 'Command': 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.XmlValue'    SSMS    D:\Projet\SSMS\SSMS\Windows\WinSchools.xaml    13

 

Severity    Code    Description    Project    File    Line
Error        The object 'DataTemplate' already has a child and cannot add 'Button'. 'DataTemplate' can accept only one child. Line 109 Position 227.    SSMS    D:\Projet\SSMS\SSMS\Windows\WinSchools.xaml    109

Severity    Code    Description    Project    File    Line
Error        The property "VisualTree" can only be set once.    SSMS    D:\Projet\SSMS\SSMS\Windows\WinSchools.xaml    107

 

Severity    Code    Description    Project    File    Line
Error        The property 'VisualTree' is set more than once.    SSMS    D:\Projet\SSMS\SSMS\Windows\WinSchools.xaml    109

 

علتش چیه به نظر شما؟

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

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

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

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