I have used RadGridViews(Telerik.Windows.Controls.GridView) in WPF that has some column. The
header of column is a CheckBox. Some times header CheckBox content binding is works fine, but when i changed to another form and return back to the same form CheckBox content binding doesn't work ie, its not showing the CheckBox contant.
the code is below
<telerikGrid:RadGridView >
<telerikGrid:RadGridView.Columns>
<telerikGrid:GridViewDataColumn DataMemberBinding="{Binding Name}" >
<telerikGrid:GridViewBoundColumnBase.Header >
<CheckBox IsChecked="False" Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikGrid:RadGridView}}, Path=DataContext.HeaderName}" />
</telerikGrid:GridViewBoundColumnBase.Header>
</telerikGrid:GridViewDataColumn>
</telerikGrid:RadGridView >
its shows some time like this
any solution pls send me, very urgent..
thanks
Govind
Problem:
In my application I am displaying data in grid. I also want a radio button to be inserted in 1 st column. On the selection of that radio button new pop-up screen should appear having details of the selected row.
I am using Telerik:RadGridView to display data . I am able to fetch the data and display.
I am getting around 4000 records fetched, now when i select a radio button and scroll down the selected row is deselected and some other random row gets selected.Sometimes no rows gets selected.
Approach followed:
I have followed following approach using virtualization
Inside my RadGridView i worte
VirtualizingStackPanel.IsVirtualizing
="True"
ScrollMode="RealTime"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
and
<telerik:GridViewDataColumn Header="" Width="35" DataMemberBinding="{Binding IsSelected, Mode=TwoWay}">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<RadioButton Click="radEditGroup_Click" HorizontalAlignment="Center" Checked="radEditGroup_Checked" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" x:Name="radEditGroup" GroupName="Groups" />
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
In .cs file for Checked ="radEditGroup_Checked" i looped through groups and deselected the radio buttons and displayed last checked button value.
private
void radEditGroup_Checked(object sender, RoutedEventArgs e)
{
try
{
ClearMessage();
if ((sender as RadioButton) != null &&
((sender
as RadioButton).DataContext as Groups) != null)
{
var lobjSelectedGroups = from lobGroup in _Groups
where lobGroup.IsSelected == true
select lobGroup;
if (lobjSelectedGroups != null)
{
foreach (Groups lobGroup in lobjSelectedGroups)
{
lobGroup.IsSelected =
false;
}
}
this._intGroupID = ((sender as RadioButton).DataContext as Groups).FUNCTION_GRP_ID;
this._intFunctionId = ((sender as RadioButton).DataContext as Groups).Function_Id;
(sender
as RadioButton).Checked -= radEditGroup_Checked;
(sender
as RadioButton).IsChecked = true;
(sender
as RadioButton).Checked += radEditGroup_Checked;
}
}
catch (Exception objEx)
{
ErrorHandling.CatchAllExceptions(objEx);
}
}
Issue facing:
When i am selecting the radio button and scrolling down Checked event gets called and slected row gets deselected.
How can i ensure that the radio button which is checked remain same even when i scoll up and down.
<
Window.Resources
>
<
DataTemplate
x:Key
=
"PanelBarItemTemplate"
>
<
StackPanel
Orientation
=
"Vertical"
>
<
TextBlock
Text
=
"{Binding PropertyName}"
/>
<
TextBlock
Text
=
"{Binding PropertyValue}"
/>
<
TextBlock
Text
=
"{Binding Comments}"
/>
</
StackPanel
>
</
DataTemplate
>
<
HierarchicalDataTemplate
x:Key
=
"PanelBarHeaderTemplate"
ItemsSource
=
"{Binding Items,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
ItemTemplate
=
"{StaticResource PanelBarItemTemplate}"
>
<
TextBlock
Text
=
"{Binding Title}"
/>
</
HierarchicalDataTemplate
>
</
Window.Resources
>
<
Grid
>
<
DockPanel
>
<
DockPanel
DockPanel.Dock
=
"Right"
Width
=
"350"
>
<
Label
/>
</
DockPanel
>
<
DockPanel
DockPanel.Dock
=
"Right"
VerticalAlignment
=
"Bottom"
>
<
telerik:RadPanelBar
ItemsSource
=
"{Binding AccordionItems,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
ItemTemplate
=
"{StaticResource PanelBarHeaderTemplate}"
telerik:StyleManager.Theme
=
"Windows7"
/>
</
DockPanel
>
</
DockPanel
>
</
Grid
>
public
class
MainViewModel:ViewModelBase
{
public
MainViewModel()
{
_accordionItems =
new
List<AccoordionHelper>();
AccordionItems =
new
List<AccoordionHelper>();
_accordionItems.Add(
new
AccoordionHelper(
"OffFinalBill"
,
new
AccordionItemsHelper(){ Comments=
"hello"
, PropertyName=
"Off Final 1: "
, PropertyValue=
"12121"
}));
_accordionItems.Add(
new
AccoordionHelper(
"PartFinal"
,
new
AccordionItemsHelper() { Comments =
"hello"
, PropertyName =
"Off Final 1: "
, PropertyValue =
"12121"
}));
AccordionItems = _accordionItems;
}
private
List<AccoordionHelper> _accordionItems =
new
List<AccoordionHelper>();
public
List<AccoordionHelper> AccordionItems
{
get
{
if
(_accordionItems ==
null
)
{
_accordionItems =
new
List<AccoordionHelper>();
}
return
_accordionItems;
}
set
{
_accordionItems = value;
this
.RaisePropertyChanged(
"AccordionItems"
);
}
}
}
public
class
AccoordionHelper:ViewModelBase
{
private
string
_title;
public
string
Title
{
get
{
return
_title;
}
set
{
_title = value;
this
.RaisePropertyChanged(
"Title"
);
}
}
private
AccordionItemsHelper _items;
public
AccordionItemsHelper Items
{
get
{
if
(_items ==
null
)
{
_items =
new
AccordionItemsHelper();
}
return
_items;
}
set
{
_items = value;
this
.RaisePropertyChanged(
"Items"
);
}
}
public
AccoordionHelper(
string
title, AccordionItemsHelper items)
{
Items=items;
Title = title;
}
}
public
class
AccordionItemsHelper
{
public
string
PropertyName {
get
;
set
; }
public
string
PropertyValue {
get
;
set
; }
public
string
Comments {
get
;
set
; }
}
private
void
editCabinetForm_AutoGeneratingField(
object
sender, Telerik.Windows.Controls.Data.DataForm.AutoGeneratingFieldEventArgs e)
{
if
(e.PropertyName ==
"CabinetName"
)
{
e.DataField.Label =
"Cabinet Name"
;
}
else
if
(e.PropertyName ==
"BriefDescription"
)
{
e.DataField.Label =
"Brief Description"
;
}
else
if
(e.PropertyName ==
"Comments"
)
{
RadRichTextBox commentsBox =
new
RadRichTextBox();
//commentsBox.SetBinding(???, new Binding("Comments"));
e.DataField.Content = commentsBox;
e.DataField.Label =
"Comments"
;
}
else
{
e.Cancel =
true
;
}
}
dBVideoArchiveDataSetArchiveTableTableAdapter.Update(dBVideoArchiveDataSet.ArchiveTable);
dBVideoArchiveDataSet.AcceptChanges();
radGridView1.Rebind();
-populate table (set binding in row_loaded)
-set background on viewmodel
-converter not called.
-clear table
-populate table (again create binding)
-set background, then it is called.
While in debug, when I checked PropertChanged.Target, in first run it is System.ComponentModel.PropertyChangedEventManager (doesnt work),
and in the second run, it is Telerik.Windows.Data.WeakEvent.WeakListener<System.ComponentModel.PropertyChangedEventArgs>.
Telerik version : 2011.1.411.40
MultiBinding multiBindingBackground = new MultiBinding();
multiBindingBackground.Converter = cellColorConverter;
Binding background = new Binding("Background");
background.Source = row.Item;
background.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
//background.Mode = BindingMode.TwoWay;
multiBindingBackground.Bindings.Add(background);
multiBindingBackground.Bindings.Add(rcBinding);
Binding isBackgroundForBackground = new Binding();
isBackgroundForBackground.Source = true;
multiBindingBackground.Bindings.Add(isBackgroundForBackground);
multiBindingBackground.Bindings.Add(new Binding());
cellBase.SetBinding(GridViewCellBase.BackgroundProperty, multiBindingBackground);