SilverLight 4.0 C# - DomainDataSource DataGrid со столбцом CheckBox (только пользовательский интерфейс - не поле данных), чтобы позволить пользователю выбрать несколько записей / строк
Новое в SilverLight и публикации здесь. Пожалуйста, помилуй и будь конкретным:)
Использование служб RIA с элементом управления DomainDataSource и DataGrid для отображения строк данных из запроса сервера SQL
Цель: иметь столбец флажка (только пользовательский интерфейс - не поле данных), чтобы позволить пользователю выбрать несколько записей / строк
Фон:
1) Создано новое решение SilverLight 4, C# с услугами RIA
2) в ProjectName.Web
- Модель Entity Framework (EF), ссылающаяся на таблицу / представление SQL-сервера (встроенное решение).
- Создание службы домена с использованием модели 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 { get; задавать; }
- в MainPage.XAML. добавлено (выше) IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"
Получение ошибки: Ошибка 11009: свойство ' ' не сопоставлено
ОБНОВЛЕНИЕ: обратная попытка 1:
Попытка 2:
Исследование возможности определения частичного класса для сущности, подключения к DataGrid и использования его для отслеживания значений CheckBox. Любой совет, если это будет работать / как?
Стараюсь изо всех сил, чтобы поглотить это. Пожалуйста, просветите меня... и спасибо заранее:)
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: создание столбца в DataGrid типа DataGridTemplateColumn с именем chkSelected
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>