DataGrid Column AutoFill

Aug 27, 2008 at 10:36 AM
Hi2all!

Is DataGrid support column auto fill?
For example, I have DataGrid with 3 colmuns: col0, col1 and col2.
I want to get following behavior: col0 and col2 has fixed width and col1 width is auto-resize on DataGrid width?
How can I achieve it ?
Coordinator
Aug 27, 2008 at 2:12 PM
Something like this should work,

<

 

dg:DataGrid.Columns>
    <dg:DataGridTextColumn Width="130" Header="Col0" />
    <dg:DataGridTextColumn Width="*" Header="Col1" />
    <dg:DataGridCheckBoxColumn Width="130" Header="Col2" />
</dg:DataGrid.Columns>

 

Col1 Width is a star width which is proportionally sized to the DataGrid width.
Sep 12, 2008 at 8:12 AM
There seems to be a bug here. If the grid does not contain any rows, the header will not resize, it seems! Is there a workaround for this?
Coordinator
Sep 12, 2008 at 1:33 PM
I'm not seeing this problem.  Could you give more detail on how you are setting up your DataGrid.
Sep 12, 2008 at 3:31 PM
I found out that if i edit the xaml (instead of using the checkbox in the designer) and set it to CanUserAddRows="True" this will work, but the checkbox in the designer will always be unchecked ( I am using Blend 2.5 June 2008 Preview). But if I klick on the little white square beside "CanUserAddRows" in the designer, klick "Reset" and then check the checkbox, I will always get the above error.
Sep 12, 2008 at 3:41 PM
Sorry, I replied in the wrong thread.
For the resize of a header without any datarows I have this setup: (The datasource is just a simple list of objects, if this list is empty, the header is not resized, if there is at least one row, the resizing works as expected)

 

<Grid>

 

 

<Grid.RowDefinitions>

 

 

<RowDefinition Height="0.291*"/>

 

 

<RowDefinition Height="0.54*"/>

 

 

<RowDefinition Height="0.169*"/>

 

 

</Grid.RowDefinitions>

 

 

<Grid.ColumnDefinitions>

 

 

<ColumnDefinition Width="0.269*"/>

 

 

<ColumnDefinition Width="0.607*"/>

 

 

<ColumnDefinition Width="0.124*"/>

 

 

</Grid.ColumnDefinitions>

 

 

<Custom:DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"

 

 

IsSynchronizedWithCurrentItem="True" Grid.Row="1" Grid.Column="1" x:Name="_dataGrid"

 

 

AlternatingRowBackground="#FFC2D2D2" HorizontalGridLinesBrush="#FFD8D8D8" VerticalGridLinesBrush="#FFFFA3A3"

 

 

GridLinesVisibility="Vertical" AutoGenerateColumns="False" ItemsSource="{StaticResource Datenliste}"

 

 

ColumnHeaderHeight="22"

 

 

Background="Transparent" BorderBrush="{x:Null}" HeadersVisibility="Column"

 

 

>

 

 

<Custom:DataGrid.Columns>

 

 

<Custom:DataGridTextColumn DataFieldBinding="{Binding Path=Name}" Header="Name" Width="30*" />

 

 

<Custom:DataGridTextColumn DataFieldBinding="{Binding Path=Kategorie}" Header="Kategorie" Width="100*" />

 

 

<Custom:DataGridTextColumn DataFieldBinding="{Binding Path=ID}" Header="ID" Width="30*" />

 

 

</Custom:DataGrid.Columns>

 

 

</Custom:DataGrid>

 

 

</Grid>

 

Coordinator
Sep 12, 2008 at 5:19 PM
hm... I copied your code and still didn't see this problem with the header resizing. 
Sep 28, 2008 at 8:45 PM
Hi,

I was also trying to get "AutoFill" type functionality. I tried ColumnWidth="*", which kind of works, but I have a trigger set for IsMouseOver to change the row background and border colours and when the trigger activates the column widths seem to start oscillating, I think due to the change in the cell contents. Also, the text in the last column is obscured by the scrollbar.

I wonder if this would be improved if I only applied proportional column width to a few of the columns (I have 10 at the moment)?

Also, how can I set this in code? I have tried DataGridLength, but this doesn't have an option for "Star" or "Proportional".

Thanks for any help offered!
Sep 28, 2008 at 9:57 PM
Hi,

Just fixed the "oscillating" column width. This was down to me having a different BorderThickness for IsMouseOver.

I expect the problem in the last column is down to my custom header, I will investigate!

I would still appreciate any help with how to set column width to proportional in code.

Thanks
Coordinator
Sep 29, 2008 at 3:20 AM
The oscillating issue that you see will be fixed in the v1 release.

To set star funcitonality on a column width in code you do something along these lines (where '1.0' is an arbitrary proportion),

DataGrid_Standard.Columns[0].Width =

new DataGridLength(1.0, DataGridLengthUnitType.Star);

 


Oct 1, 2008 at 7:00 PM
Thanks, that works.