Ok, so I am opening a new topic with this issue
Hi, I am MarkoI am having a problem understanding how this works:http://samples.infragistics.com/sllob/RunSamples.aspx?cn=grid#/grid/handling-hierarchical-data-setsCan someone please put here some sample project with Access database (I am using SQL 2008) so that I can see how do I get data from the database into the class objects and the into grid. I am asking this cause I can't understand this part with binding data to the columns:Text="{Binding Source={StaticResource Strings} , Path=XWG_OrderDetails_Discount}"This is how I load data into grid from database: I make new class "Users" and make method in service "GetUsers" that executes sql query and gets data from db onto list of objects of "Users" class and returns that list. When execution of the service method is completed I do this xamGrid1.ItemsSource = e.Result; and grid displays data.How is this "http://samples.infragistics.com/sllob/RunSamples.aspx?cn=grid#/grid/handling-hierarchical-data-sets" different ? comparing to the my method described above??
PS. Can someone please put here some sample project with Access database.
Please help me resolve this issue,Best regards,Marko
Hello,
I have been looking into the sample provided and compared to your scenario the two implementations does basically the same, but the Infragistics sample performs the action via binding from the xaml.
To be more specific, you set the xamGrid’s ItemsSource in the code behind. I am not sure what e.Result is, but I assume that this is the output from the service that provides the data. You mentioned that you have collection of Users that are loaded with data retrieved from the db. Let say that you have a Name property in this User class and you have filled it with a data. In case you have a textBox, like in the Infragistics sample, that you wish to fill with this name, you can do this in two different ways:
From the code behind:
myText.Text = User.Name;
or bind it from the xaml:
xmlns:local="clr-namespace:MySamle" //reference to the codehind
.
<Grid.Resources>
<local:User x:Key="UsrData"/> // we get the class
</Grid.Resources>
<Text="{Binding Source={StaticResource UsrData } , Path= Name }" // and bind to the needed property
What happens in the sample is pretty much the same and it is possible to Grid’s ItemsSource from the xaml. Notice that you probably should implement the INotifyPropertyChanged interface, in order to have your TextBox updated according to its corresponding data source. For more information on the mentioned interface, please visit:
http://msdn.microsoft.com/en-us/library/ms743695.aspx
Please do not hesitate to ask any question regarding the original discussed topic .
Sincerely,
Ekaterina
Developer Support Engineer
Infragistics, Inc.
www.infragistics.com/support
Hello
EkStaneva thank you very much for your answer ,now I understand the concept of binding data from the xaml code.
I still have the problem of understanding the concept of "ColumnLayout columns" tough. And I don't get how do I bind data into those columns because that kind of columns can also have their own "ColumnLayout columns"
On this example page:http://samples.infragistics.com/sllob/RunSamples.aspx?cn=grid#/grid/handling-hierarchical-data-sets there is:
<navigation:Page.Resources> <res:GridStrings x:Key="Strings" /> </navigation:Page.Resources>
So I guess there is an object "GridStrings" somewhere on code behind. I can't possibly visualize how this object looks like (his definition) cause one customer has his orders, every order has it's details (it is hierarchical). It is not as simple as Users object from the previous post. That is why I asked if you or someone else could make an example project and post it here cause I can't find one on this site.
Please help I didn't resolved this issue yet.
Best regards,
Marko.
Hi.
That worked, thanks.
Here is how it looks:
Now, my problem is all those white gaps between expansion indicator cells and among parent rows. How do I get rid of those? Is there some padding to be set to 0 in style of expansion indicator cells ?? maybe ? Both heights are set to 14px (parent row height and expansion indicator height). Here is how I set the style of parent rows:
Style styleKomentarNaslov = new Style(typeof(CellControl)); styleKomentarNaslov.Setters.Add(new Setter(CellControl.BackgroundProperty, new SolidColorBrush(Colors.Red))); //230, 255, 230 84, 255, 244 styleKomentarNaslov.Setters.Add(new Setter(CellControl.ForegroundProperty, new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)))); styleKomentarNaslov.Setters.Add(new Setter(CellControl.PaddingProperty, "0,0")); styleKomentarNaslov.Setters.Add(new Setter(CellControl.FontFamilyProperty, new FontFamily("Arial"))); styleKomentarNaslov.Setters.Add(new Setter(CellControl.FontSizeProperty, "11")); styleKomentarNaslov.Setters.Add(new Setter(CellControl.VerticalAlignmentProperty, "Top")); styleKomentarNaslov.Setters.Add(new Setter(CellControl.VerticalContentAlignmentProperty, "Center")); styleKomentarNaslov.Setters.Add(new Setter(CellControl.HeightProperty, "14"));//20 styleKomentarNaslov.Setters.Add(new Setter(CellControl.CursorProperty, "Hand")); styleKomentarNaslov.Setters.Add(new Setter(CellControl.FontStretchProperty, "SemiCondensed"));
So padding among parent rows is set to 0. I think only problem now is padding of those indicator cells.
Marko
Somebody knows how to do this?
To remove this gap (padding) from the expansion indicator cells ?
I haven't resolved this issue yet.
Please help
best regards.
Hi
I have visited the link you posted http://forums.infragistics.com/forums/p/67378/341050.aspx and also I have downloaded that project xamCalendar_setColorToDay.zip. I have opened that project but there is no xamGrid with expansion indicator cells in it. I have read that thread and looked trought that sample project but I couldn't find anything that I could use to help me solve my issue.
In my project here is how I wrote at the end of my xamGrid:
<ig:XamGrid.ExpansionIndicatorSettings> <ig:ExpansionIndicatorSettings> <ig:ExpansionIndicatorSettings.Style> <Style TargetType="Prim:ExpansionIndicatorCellControl"> <Setter Property="Height" Value="14"/> <Setter Property="Padding" Value="0" /> <Setter Property="MaxHeight" Value="14" /> <Setter Property="Margin" Value="0" /> </Style> </ig:ExpansionIndicatorSettings.Style> </ig:ExpansionIndicatorSettings> </ig:XamGrid.ExpansionIndicatorSettings>
Should this be enough? ... I have clearly specified height of expansion indicator cells to be 14px , padding to be 0px margin to be 0px . But all that had no effect.
I don't know what to do next?
I have managed to remove that gap between expansion indicator cells. It was my mistake in the first place, sorry.
Problem was that I left RowHeight property of xamGrid to 23px (and this height applies to expander indicator column also):
<ig:XamGrid x:Name="xamGridAktivnosti" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.Row="2" MaxWidth="1062" Width="1062" RowHeight="23" CellStyle="{StaticResource xamGreen}" AutoGenerateColumns="False" IsAlternateRowsEnabled="False">
When I set RowHeight to 14px rows come up nice without gap between them or between the expansion indicator cells see::
As you can see now I have a problem. If I don't use RowHeight property I get a gap between expansion indicator cells, and if I use RowHeight property then there is no gap but then not all text is visible in the sub row when I expand (as you can see - selected sub row on the picture). It should be 4 or 5 lines of text but I can see only one. Here is the xaml:
<ig:ColumnLayout Key="listKomentarTitles" ColumnLayoutHeaderVisibility="Never" HeaderVisibility="Collapsed" > <ig:ColumnLayout.Columns> <ig:TextColumn Key="NASLOV" HeaderText="Log tiketa" /> <ig:ColumnLayout Key="KOMENTARTEXT" ColumnLayoutHeaderVisibility="Never" HeaderVisibility="Collapsed" > <ig:ColumnLayout.Columns> <ig:TextColumn Key="TEXT" TextWrapping="Wrap" HeaderText="Komentar" /> </ig:ColumnLayout.Columns> </ig:ColumnLayout> </ig:ColumnLayout.Columns> </ig:ColumnLayout>
.. as you can see TextWrapping is turned on. I set the style like so:
Style styleKomentarText = new Style(typeof(CellControl)); styleKomentarText.Setters.Add(new Setter(CellControl.WidthProperty, "Auto"));styleKomentarText.Setters.Add(new Setter(CellControl.HeightProperty, "Auto")); styleKomentarText.Setters.Add(new Setter(CellControl.PaddingProperty, "0,0")); styleKomentarText.Setters.Add(new Setter(CellControl.FontFamilyProperty, new FontFamily("Arial"))); styleKomentarText.Setters.Add(new Setter(CellControl.FontSizeProperty, "11")); styleKomentarText.Setters.Add(new Setter(CellControl.VerticalAlignmentProperty, "Top")); styleKomentarText.Setters.Add(new Setter(CellControl.VerticalContentAlignmentProperty, "Center")); styleKomentarText.Setters.Add(new Setter(CellControl.CursorProperty, "Hand")); styleKomentarText.Setters.Add(new Setter(CellControl.FontStretchProperty, "SemiCondensed")); e.Row.CellStyle = styleKomentarText;
Please help what do I do? I must use RowHeight but I also must have that sub row to hold huge amount of text. It's height has to depend of the amount of text that loads into that sub row (1 column):
<ig:TextColumn Key="TEXT" TextWrapping="Wrap" />
Or just to simplify the question:
Can some row have it's own independent height ("Auto") if RowHeight property is set on the grid level to some value?
Can RowHeight be set for each row separately?? So maybe I can adjust it during InitializeRow event ??
I didn't resolved this issue yet.
Best regards.
Hello ,
I am just checking if you require any further assistance on the matter.
Infragistics
Hi Marko,
I am glad I was able to assist you.
As to your last questions, I took a look and there is a gap in the 3ird row because, as I mentioned, my code reaches only the second level of the hierarchy. In order to manipulate the third one, you can nest additional loop like this:
foreach (Row r in xamGrid1.Rows)
{
if (r.Control.Height != 14)
r.Control.Height = 14;
if (r.HasChildren)
foreach (var c in r.ChildBands)
foreach (Row row in c.Rows)
if (row.Control != null && row.Control.Height != 14)
row.Control.Height = 14;
foreach (var v in row.ChildBands)
foreach (Row row2 in v.Rows)
if (row2.Control != null && row2.Control.Height != 14)
row2.Control.Height = 14;
}
Or you can organize this in a recursion structure, so no nesting will be necessary in future, if you decide to add more levels in your hierarchy.
As to your second question, every column layout can declare its own expansion indicator’s style - all you have to do is to define ExpansionIndicatorSettings on the desired level. Please notice that you should use ExpansionIndicatorSettingsOverridel like this:
<ig:ColumnLayout.ExpansionIndicatorSettings>
<ig:ExpansionIndicatorSettingsOverride>
<ig:ExpansionIndicatorSettingsOverride.Style>
<Style TargetType="Prim:ExpansionIndicatorCellControl">
<Setter Property="Height" Value="20"/>
<Setter Property="Background" Value="Violet"/>
</Style>
</ig:ExpansionIndicatorSettingsOverride.Style>
</ig:ExpansionIndicatorSettingsOverride>
</ig:ColumnLayout.ExpansionIndicatorSettings>
<ig:ColumnLayout.Columns> …
Please let me know if you have any additional questions regarding the discussed matter.
Hi EkStaneva
Your solution works fine. Thank you very much for your help.
I have two more doubts but they are not so impostant, I am just gonna ask you if you know to solve them of the top of your head. Here is the picture:
1st one: Can you see the gap still exists only (i repeat only) after the first sub row "Opis problema"? How do I remove it?
2nd one: Can expansion indicator cell have two different styles?? One style on ordinary (parent) row and second style on sub row. I am asking this because I have set padding so that the arrow would be nicely visible on sub row expansion indicator cells where height of the cell is 15px. But that style
<Setter Property="Padding" Value="0 -2 0 0" /> <-- note !! <Setter Property="Margin" Value="0" /> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Top" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="Width" Value="30" />
applies on expansion indicator cells of parent rows too where height of the row is 26px so the arrow goes up. And is not vertically centered to "Center". It just doesn't look nice.
These ARE minor issues but I would like to solve them nevertheless.
Hi,
thank you for your answer, I will try it and then I'll get back to you.
Hello Marko,
I have been investigating into your issue and you can use the following code in order to set the height of the xamGrid’s main layout and second layout rows separately:
private void xamGrid1_LayoutUpdated(object sender, EventArgs e)
Please notice that the inner instance of the row.Control will be instantiated when the corresponding layout gets expanded, which means that the height property should be set when the layout is being updated. That’s why I am placing this code in the LayoutUpdated handler. Notice also the check which I am performing (if value is 14) – this one is done in order to guarantee that the height property will be set only once, even though the handler is being invoked multiple times.
Please let me know if you require funder assistance regarding the discussed matter.