У меня есть сетка данных, которая заполняется из списка. Я добавил несколько флажков, чтобы можно было удалять элементы в списке, но потом не мог понять, как прикрепить 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();
}
}
}