Silverlight Controls and Silverlight Toolkithttp://forums.silverlight.net//35.aspx/1?Silverlight+Controls+and+Silverlight+ToolkitDiscussions around using and developing Silverlight controls and the Silverlight ToolkitMon, 01 Jan 0001 00:00:00 -05003536281http://forums.silverlight.net//p/11360/36281.aspx/1?Hiding+a+Row+in+DataGridHiding a Row in DataGrid <p>&nbsp;Hello,</p> <p>&nbsp;</p> <p>I am trying to built a Datagrid in Silverlight 2.0 and i am not able to hide a row in a DataGrid While i am able to hide a column in a Data Grid.Can any one tell me how to do that ?</p> <br> Thanks in Advance ! 2008-03-12T09:48:49-04:0036340http://forums.silverlight.net//p/11360/36340.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid &nbsp; <br> 2008-03-12T12:56:40-04:0036996http://forums.silverlight.net//p/11360/36996.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid <p>&nbsp;</p> <p>Hello, first you should set the DataGrid's RowHeight to 0. This will make all rows (including the place holder) to become invisible. Then you can handle PreparingRow event, and set all rows but the desired one's Height to the default value 22, or any height you want.</p> <font size="2"></font><font color="#0000ff" size="2">void</font><font size="2"> dg_PreparingRow(</font><font color="#0000ff" size="2">object</font><font size="2"> sender, </font><font color="#2b91af" size="2">DataGridRowEventArgs</font><font size="2"> e)</font><font size="2"> <p>{</p> </font><font color="#0000ff" size="2">if</font><font size="2"> (e.Row.Index == 1)</font><font size="2"> <p>{</p> e.Row.Visibility = </font><font color="#2b91af" size="2">Visibility</font><font size="2">.Collapsed;</font><font size="2"> <p>}</p> <p></font><font color="#0000ff" size="2">else</p> </font><font size="2"> <p>{</p> <p>e.Row.Height = 22;</p> <p>}</p> <p>}</p> </font> <p class="style1">N<font size="2">ote if you don't set DataGrid's RowHeight to 0, and simply set the desired row's Visibility to Collapsed, that row's data will be invisible, but the row's place holder will still be there.</font></p> 2008-03-14T05:28:10-04:0075386http://forums.silverlight.net//p/11360/75386.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid <p><strong>Yi-Lun Luo,</strong></p> <p>I thought&nbsp;it might be a better suggestion to actually do this using the ItemsSource / databinding&nbsp;and an expression.</p> <p>For example, have a .Visible property on your entity, and then use something like:<br> </p> <p>dg.ItemsSource = dataitems.Where(item =&gt; item.Visible.Equals(true));</p> <p>In theory.. when you change the Visible property the row should show up... I tried this and it did not work.&nbsp; I had to handle the propertychanged event of the entity so that when Visibility would change, I could rebind the datagrid items source, e.g.</p> <p><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public grid_test()<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Setupdata();<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;Task&gt; tasks = new List&lt;Task&gt;();<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void Setupdata()<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.Add(new Task() { Name = &quot;one&quot;, Visible = true });<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.Add(new Task() { Name = &quot;two&quot;, Visible = true });<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.Add(new Task() { Name = &quot;three&quot;, Visible = true });<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.Add(new Task() { Name = &quot;four&quot;, Visible = true });<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.Add(new Task() { Name = &quot;five&quot;, Visible = true });</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (Task t in tasks)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.PropertyChanged &#43;= new System.ComponentModel.PropertyChangedEventHandler(t_PropertyChanged);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dg.ItemsSource = tasks.Where(t =&gt; t.Visible.Equals(true));<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void t_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.PropertyName.Equals(&quot;Visible&quot;))<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dg.ItemsSource = tasks.Where(t =&gt; t.Visible.Equals(true));<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>The problem here is obvious, I lose my selected rows, and any other relevant state on the datagrid when rebinding.&nbsp; Still, it seems to me that binding would be the best way to handle this... what about something like this (except I can't figure out how the index&nbsp; helps me..):</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void t_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.PropertyName.Equals(&quot;Visible&quot;))<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Task t = sender as Task;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index = tasks.IndexOf(t);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (t.Visible)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // use index somehow to show row?<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // use index somehow to collpase row?<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> 2008-07-28T22:29:53-04:0075570http://forums.silverlight.net//p/11360/75570.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid <p>well I figured something out so I guess I'll reply to myself in case this helps out someone else.&nbsp; Basically I borrowed from both ideas... if you want to get this to work using databinding you can do it through Converters...</p> <p>1) create 2 converters,&nbsp;one to convert a boolean to Visibility enum, and one to convert boolean to Double (for height) - actually these converters can be whatever you want, in my case it was a boolean that dictates the display of a row.</p> <p>Then in the row loading you set the binding for the Row .Visibility and .Height properties, e.g.:</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void dg_LoadingRow(object sender, DataGridRowEventArgs e)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Task t = e.Row.DataContext as Task;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (t != null)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Binding b = new Binding(&quot;Visible&quot;);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.Converter=Resources[&quot;boolToVis&quot;] as IValueConverter;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.SetBinding(DataGridRow.VisibilityProperty, b);</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Binding b2 = new Binding(&quot;Visible&quot;);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b2.Converter = Resources[&quot;boolToHeight&quot;] as IValueConverter;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.SetBinding(DataGridRow.HeightProperty, b2);<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex) { }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> </p> <p>Now when you toggle the entity value (in my case Task.Visible) it will be hidden/displayed in the datagrid accordingly.&nbsp; The only issue I have now is that if the row is selected, and then set to not be visible, the user would not know there was a selected row... but that's easy enough to handle I think.</p> 2008-07-29T13:25:36-04:0082822http://forums.silverlight.net//p/11360/82822.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid <p></p> <blockquote><span class="icon-blockquote"></span> <h4>Yi-Lun Luo - MSFT</h4> <font color="#0000ff" size="2">void</font><font size="2"> dg_PreparingRow(</font><font color="#0000ff" size="2">object</font><font size="2"> sender, </font><font color="#2b91af" size="2">DataGridRowEventArgs</font><font size="2"> e)</font><font size="2"> <br> {<br> </font><font color="#0000ff" size="2">&nbsp;&nbsp; if</font><font size="2"> (e.Row.Index == 1)<br> &nbsp;&nbsp; </font><font size="2">{<br> </font></blockquote> <p>DataGridRow does not expose an Index property in S2B2 any more, so this code is now unusable.</p> 2008-08-22T06:19:04-04:00349092http://forums.silverlight.net//p/11360/349092.aspx/1?Re+Re+Hiding+a+Row+in+DataGridRe: Re: Hiding a Row in DataGrid <p>&nbsp;there's a simpler and cleaner way of doing this:</p> <p>see my answer here: http://forums.silverlight.net/forums/p/11359/36279.aspx <br> </p> 2010-01-15T11:55:41-05:00548192http://forums.silverlight.net//p/11360/548192.aspx/1?Re+Hiding+a+Row+in+DataGridRe: Hiding a Row in DataGrid <pre style="font-family:Consolas; color:black; background:none repeat scroll 0% 0% white">This also works:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:blue">private</span>&nbsp;<span style="color:blue">void</span> datagrid_LoadingRow(<span style="color:blue">object</span>&nbsp;sender,&nbsp;<span style="color:rgb(43,145,175)">DataGridRowEventArgs</span>&nbsp;e) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue">if</span>&nbsp;(((<span style="color:rgb(43,145,175)">DataGrid</span>)sender).ItemsSource&nbsp;!=&nbsp;<span style="color:blue">null</span>) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:rgb(43,145,175)">Binding</span>&nbsp;newBinding&nbsp;=&nbsp;<span style="color:blue">new</span>&nbsp;<span style="color:rgb(43,145,175)">Binding</span>(<span style="color:rgb(163,21,21)">&quot;IsMarkedForHide&quot;</span>); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newBinding.Mode&nbsp;=&nbsp;<span style="color:rgb(43,145,175)">BindingMode</span>.TwoWay; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.SetBinding(<span style="color:rgb(43,145,175)">DataGridRow</span>.VisibilityProperty,&nbsp;newBinding); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue">private</span>&nbsp;<span style="color:blue">void</span> datagrid_UnloadingRow(<span style="color:blue">object</span>&nbsp;sender,&nbsp;<span style="color:rgb(43,145,175)">DataGridRowEventArgs</span>&nbsp;e) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue">if</span>&nbsp;(((<span style="color:rgb(43,145,175)">DataGrid</span>)sender).ItemsSource&nbsp;!=&nbsp;<span style="color:blue">null</span>) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Row.DataContext&nbsp;=&nbsp;<span style="color:blue">null</span>; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre> 2011-04-21T18:17:20-04:00