2

SilverLight とここへの投稿は初めてです。慈悲を持って具体的にしてください:)

DomainDataSource および DataGrid コントロールで RIA サービスを使用して、SQL サーバー クエリからのデータ行を表示する

目標: ユーザーが複数のレコード/行を選択できるように、チェックボックス列 (UI のみ - データ フィールドではない) を用意する

背景:
1) RIA サービスを使用して新しい SilverLight 4、C# ソリューションを作成

2) ProjectName.Web 内

  • SQL サーバー テーブル/ビューを参照する Entity Framework (EF) モデルを作成しました (ビルドされたソリューション)。
  • EF モデル (ビルド済みソリューション) を使用してドメイン サービスを作成しました。

3) SilverLightProjectName で

  • [データ ソース] ウィンドウからテーブルをデザイン サーフェイスにドラッグして、DomainDataSource と DataGrid を作成します (これは、DataGrid をデータ ソースにバインドするのに最適です)。

4) MainPage.XAML にチェックボックス列を追加

何が起きているか: チェックボックスがユーザーによって選択/チェックされ、下にスクロールし、上にスクロールし、すべてのチェックボックスがリセットされ、Datagrid.SelectedItem のみがチェックされたままになります。この動作は、ページングによる「設計による」ものであると読みました。

<sdk:DataGrid  RowStyle="{StaticResource newDataGridStyle}"  AutoGenerateColumns="False" ItemsSource="{Binding ElementName=ddsPagerApp, Path=Data}" Name="vwPagerAppDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" MouseLeftButtonDown="vwPagerAppDataGrid_MouseLeftButtonDown" VerticalGridLinesBrush="#FFB9B9B9" FontSize="10" Grid.Row="3" SelectionChanged="vwPagerAppDataGrid_SelectionChanged" KeyDown="vwPagerAppDataGrid_KeyDown" MouseLeftButtonUp="vwPagerAppDataGrid_MouseLeftButtonUp" MouseRightButtonUp="vwPagerAppDataGrid_MouseRightButtonUp" DataContext="{Binding}" SelectionMode="Single" IsEnabled="True" IsReadOnly="False" TabIndex="2" Grid.Column="1" Margin="0,10,9,9">
        <sdk:DataGrid.Columns>                
            <sdk:DataGridTemplateColumn IsReadOnly="False">                    
                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <CheckBox  Name="ChkSelected" IsThreeState="False" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Unchecked="IndividualCheckBox_Unchecked" Checked="IndividualCheckBox_Checked" Width="Auto" Height="Auto" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellEditingTemplate>
            </sdk:DataGridTemplateColumn>
        <sdk:DataGridTextColumn x:Name="fullNameColumn" Binding="{Binding Path=FullName}" Header="Full Name" IsReadOnly="True" />
        <sdk:DataGridTextColumn x:Name="departmentColumn" Binding="{Binding Path=department}" Header="Department" IsReadOnly="True" />
        <sdk:DataGridTextColumn x:Name="pager_number_displayColumn" Binding="{Binding Path=pager_number_display}" Header="Pager Number" IsReadOnly="True" />
        <sdk:DataGridTextColumn x:Name="PageTo" Binding="{Binding Path=PageTo}" Header="Page To" IsReadOnly="True" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:vwPagerApp, CreateList=true}" Height="0" LoadedData="ddsPagerApp_LoadedData" Name="ddsPagerApp" QueryName="GetVwPagerAppsQuery" Width="0" Margin="10,0,25,45" Background="#FF7D0000" Foreground="#FF7D0000" Visibility="Visible">
    <riaControls:DomainDataSource.DomainContext>
        <my:NotifyDomainContext />
    </riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>

試行 1:

  • EFModel.edmx にブール型スカラー プロパティ 'IsChecked' を追加
  • DomainService.metadata.cs に public bool IsChecked { get; を追加。設定; }
  • MainPage.XAML で。追加 (上) IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"

取得エラー: エラー 11009: プロパティ ' ' がマップされていません

更新: 逆試行 1:

試行 2:
エンティティの部分クラスを定義し、DataGrid に接続し、それを使用して CheckBox 値を追跡する可能性を調査します。 これが機能するかどうか/方法について何かアドバイスはありますか?

これを吸収するために最善を尽くします。私を啓発してください...そして事前に感謝します:)

4

1 に答える 1

1

これは私が実装したもので、美しく機能しました。将来、他の誰かに役立つことを願っています:)

1) SilverLight プロジェクト C#:部分クラスを使用してエンティティ クラスを拡張します (別のファイル内ですが、同じ名前空間内 - 1 つのクラスにコンパイルされますが、生成されたコードは別々に保持されます)。

namespace Pager.Web
{
  public partial class pager_grp
    {
        bool _IsChecked = false;
        public bool IsChecked
        {
            get
            {return this._IsChecked;}
            set
            {this._IsChecked = !IsChecked;}
        }
    }
}

2) SilverLight プロジェクト GUI: DataGrid に、chkSelected という名前の DataGridTemplateColumn タイプの列を作成します。

3) SilverLight Project XAML: テンプレートを使用し、部分クラスで宣言された新しいプロパティにバインドします

   <sdk:DataGridTemplateColumn IsReadOnly="False">                    
   <sdk:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <CheckBox  Name="ChkSelected" IsThreeState="False" IsChecked="{Binding    Path=IsChecked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Unchecked="IndividualCheckBox_Unchecked" Checked="IndividualCheckBox_Checked" Width="Auto" Height="Auto" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>
于 2013-01-22T16:45:27.280 に答える