2011-01-13 60 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並更改想要隱藏的列的可見性。

相關問題