Установка идентификатора для XAML Checkbox - PullRequest
0 голосов
/ 02 июля 2018

У меня есть сетка данных, которая заполняется из списка. Я добавил несколько флажков, чтобы можно было удалять элементы в списке, но потом не мог понять, как прикрепить ID / Gui к флажку, чтобы я мог удалить их по идентификатору базы данных #. В конце концов я добавил новый столбец ID и попытался установить его ширину равным 0 или установить его видимость скрытым или свернутым, но затем он не может найти идентификатор, если значение не отображается. Вот код для заполнения:

public void PopulateDataGrid()
{
    items = new List<CommandGridItems>();
    var serverCommandsList = ServerDB.ExecuteDB("SELECT * FROM commands where group_id = " + Config.groupId);
    var json = JsonConvert.SerializeObject(serverCommandsList);
    dynamic dynJson = JsonConvert.DeserializeObject(json);
    foreach (var command in dynJson)
    {
        items.Insert(items.Count, new CommandGridItems() { Delete = false, Command = command.command.ToString(), Response = command.expected_response.ToString(), Results = "", Command_ID = command.id.ToString() });
    }
    CommandRows2.ItemsSource = items;
    CommandRows2.Items.Refresh();

}

XAML:

<DataGrid Name="CommandRows2" Margin="0,36,0,73" AutoGenerateColumns="False" ScrollViewer.CanContentScroll="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Command_ID}" Width="0" x:Name="ID"/>
        <DataGridCheckBoxColumn Header="Delete" Binding="{Binding Delete}"  x:Name="Delete"/>
        <DataGridTextColumn Header="Command" Binding="{Binding Command}" Width="200"/>
        <DataGridTextColumn Header="Response" Binding="{Binding Response}" Width="*"/>
        <DataGridTextColumn Header="Test Results" Binding="{Binding Results}" Width="70"/>

    </DataGrid.Columns>
</DataGrid>

Я попытался прикрепить свойства к DataGridCheckBoxColumn, такие как x:Gui, DataContext, x:XData и еще несколько, но не могу найти способ прикрепить идентификатор к флажку, чтобы я не смог должен иметь дополнительный столбец, который ничего не добавляет к представлению.

Вот то, что я использую для удаления, опять же, он не может найти значение для rowId, если этот столбец не виден.

private void Delete_Commands(object sender, RoutedEventArgs e)
{
    foreach (CommandGridItems item in CommandRows2.ItemsSource)
    {
        if (((CheckBox)Delete.GetCellContent(item)).IsChecked == true)
        {
            var rowId = ID.GetCellContent(item) as TextBlock;
            ServerDB.ExecuteDB("DELETE FROM commands where id = " + rowId.Text);
            PopulateDataGrid();
        }
    }
}

1 Ответ

0 голосов
/ 02 июля 2018

Зачем беспокоиться об элементах пользовательского интерфейса, когда уже есть ссылка на элемент данных? Свойства элементов данных обновляются через привязки после взаимодействия пользователя с пользовательским интерфейсом (например, щелчки по флажкам)

private void Delete_Commands(object sender, RoutedEventArgs e)
{
    foreach (CommandGridItems item in CommandRows2.ItemsSource)
    {
        if (item.Delete)
        {
            // use parameter for id here !!!
            ServerDB.ExecuteDB("DELETE FROM commands where id = " + item.Command_ID);
        }
    }
    PopulateDataGrid();
}

также, если ItemsSource является ObservableCollection, то элементы могут быть удалены из него (и из DataGrid благодаря INotifyCollectionChanged) без перезагрузки всех данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...