2011-01-13 63 views
1

我的客户具有此要求: alt text 即具有可折叠列的网格。我发现最简单的方法是有3个独立的数据网格和2个按钮,显示或折叠网格。将数据网格的排序应用到另一个数据网格

下面是相关的XAML:

<StackPanel Orientation="Horizontal" Grid.Column="2" Grid.Row="0" VerticalAlignment="Stretch"> 

      <toolkit:DataGridDragDropTarget VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch"> 

       <sdk:DataGrid Name="Grid1" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False"> 
        <sdk:DataGrid.Columns> 
         <sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" /> 
         <sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" /> 
         <sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader"/> 
         <sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" /> 
        </sdk:DataGrid.Columns> 
       </sdk:DataGrid> 

      </toolkit:DataGridDragDropTarget> 

      <Button Content=">" Click="Button_Click" Name="btn1" /> 
      <sdk:DataGrid Name="Grid2" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False" ItemsSource="{Binding ItemsSource, ElementName=Grid1}"> 
       <sdk:DataGrid.Columns> 
        <sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" /> 
        <sdk:DataGridCheckBoxColumn Header="someheader" Binding="{Binding somefield}" /> 
        <sdk:DataGridCheckBoxColumn Header="someheader" Binding="{Binding somefield}" /> 
        <sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" /> 
        <sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" /> 
       </sdk:DataGrid.Columns> 
      </sdk:DataGrid> 

      <Button Content=">" Name="btn2" Click="Button_Click"/> 
      <sdk:DataGrid Name="Grid3" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False" ItemsSource="{Binding ItemsSource, ElementName=Grid1}"> 
       <sdk:DataGrid.Columns> 
        <sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" /> 
       </sdk:DataGrid.Columns> 
      </sdk:DataGrid> 

     </StackPanel> 

这是正常工作。当我想对网格进行排序时出现问题。由于排序是在数据网格内部进行的,因此这些更改不会传播到其他网站(即使它们绑定到相同的源代码也很难!)。

有没有办法将排序“传播”到其他网格?我试图找到一种方法来拦截排序事件,但它似乎并不存在...

在此先感谢!

回答

1

为什么要使用3个数据库? 最好只使用1个数据库和一个选项页面,用户可以隐藏他/她的列。 您可以使用DataGrid.Columns[0].Visibility = Visibility.Collapsed隐藏到列。

您可以使用列上方的按钮或某处的复选框...或选项页执行此操作。很多oppertunaties。唯一的缺点是,这不能在MVVM中实现,因为DataGridColumn不支持可见性绑定。

这样回答你的问题:

也许这些信息可以帮助你,只是应用排序这两个数据网格

private void Sort_DataGrid(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e) 
{ 
    // Never use Queries like this always use Stored procedures 

    SqlCommand myCommand = new SqlCommand("SELECT * FROM Categories", myConnection);                
    myCommand.CommandType = CommandType.Text; 
    SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand); 
    DataSet ds = new DataSet(); 
    myAdapter.Fill(ds,"Categories"); 
    DataView dv = new DataView(ds.Tables["Categories"]); 
    if((numberDiv%2) == 0) 
     dv.Sort = e.SortExpression + " " + "ASC"; 
    else 
     dv.Sort = e.SortExpression + " " + "DESC"; 
    numberDiv++; 
    myDataGrid.DataSource = dv; 
    myDataGrid.DataBind(); 
} 

来源:http://www.codeproject.com/KB/webforms/SortingDataGridColumns.aspx

+0

问题是关于Silverlight。 – 2011-01-24 06:39:19

1
  1. 如果你坚持三个DataGrid解决方案我认为你最好把它们包装在一个控件中,并为这个控件添加一些排序按钮。这些按钮应该触发所有数据网格的排序。

  2. 另一种方法是使用1 DataGrid并更改想要隐藏的列的可见性。

相关问题