1

SilverLight的新功能並在此發佈。請憐憫和具體:)SilverLight 4.0 C# - 具有CheckBox列的DomainDataSource DataGrid(僅限用戶界面 - 不是數據字段)允許用戶選擇多個記錄/行

使用RIA服務與DomainDataSource和DataGrid控件來顯示從SQL Server查詢數據行

目標:有複選框列(UI唯一的 - 不是數據字段)來允許用戶選擇多個記錄/行

背景:
1)創建新的Silverlight 4,用C#溶液RIA服務

2)ProjectName.Web

  • 創建實體框架(EF)模型引用SQL Server表/視圖(內置解決方案)。
  • 使用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
  • ,增加公共BOOL {器isChecked獲得;組; } MainPage.XAML中的
  • 。加入(上文)器isChecked = 「{綁定路徑=器isChecked,模式=雙向}」

獲取錯誤:錯誤11009:屬性 '' 沒有被映射

UPDATE:反轉嘗試1:

嘗試2:
研究限定的局部類的實體,佈線DataGrid和使用該跟蹤複選框值的可能性。 任何意見,如果這將工作/如何?

盡我最大的努力來吸收這一點。請賜教我...並提前謝謝你:)

回答

0

這是我實施,它的工作很好。我希望它可以幫助別人的未來:)

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:在名爲chkSelected

3)Silverlight項目XAML類型DataGridTemplateColumn的數據網格創建柱:使用TEMPL吃掉並綁定到部分類中聲明的新屬性

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