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>
Другие вопросы по тегам