2011-01-13 10 views
1

クライアントには、この要件があります。 つまり、折りたたみ可能な列を含むグリッドです。私が見つけた最も簡単な方法は、3つの別々のデータグリッドと2つのボタンを持って、グリッドを表示または折りたたむことです。これが正しく動作しているデータグリッドのソートを別のデータグリッドに適用する

<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> 

:ここ

は、関連するXAMLです。私の問題は、グリッドの1つをソートするときに発生します。並べ替えはデータグリッドの内部にあるので、変更は他のものに伝播されません(同じソースにバインドされていても厳しいです)。

ソートを他のグリッドに「伝播」する方法はありますか?ソートイベントをインターセプトする方法を見つけようとしましたが、存在しないようです...

ありがとうございます!

答えて

1

なぜデータベースを3つ使用しますか? ただ1つのデータベースとオプションのページを使用して、自分の列を非表示にすることをお勧めします。 DataGrid.Columns[0].Visibility = Visibility.Collapsedを使用して列に非表示にすることができます。

これは、列の上のボタン..またはどこかのチェックボックス...またはオプションページで行うことができます。多くの反抗勢力。唯一の欠点は、DataGridColumnがVisibility Bindingをサポートしていないため、これをMVVMに実装できないことです。あなたの質問への答えとして

:あなたは3に固執する場合http://www.codeproject.com/KB/webforms/SortingDataGridColumns.aspx

+0

質問はSilverlightについてです。 –

+0

まだ私は、1つのDataGridを使用して列の可視性を変更する方が良いと考えています。これにより、バインド元をソートしない限り、データグリッドにソートをプログラムで適用することができないため、データグリッドのソート方法を見つける手間が省けます。 したがって、データグリッドソートのイベントを発生させることはできません。また、C#/ silverlight(バインディング)をデータ列にソートすることもできません。 –

+0

スペックが変更され、グリッド内のボタンが消えて、代わりにあなたが言ったことが提案されます(余分な列を隠す/表示する単一のボタン)。とにかくこのことについて考えてくれてありがとう:-) – Shimrod

1
  1. おそらく、この情報だけで両方のデータグリッドに

    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(); 
    } 
    

    ソースを並べ替え適用、あなたを助けますDataGridのソリューション私はあなたがコントロールでラップし、いくつかの並べ替えボタンをこのコントロールに追加する方が良いだろうと思う。ボタンは、すべてのデータグリッドの並べ替えをトリガする必要があります。

  2. もう1つの方法は、1つのDataGridを使用して、非表示にする列の可視性を変更することです。

関連する問題