我有一个从列表填充的数据网格。我添加了一些复选框,以便可以删除列表中的项目,但后来又不知道如何将ID / Gui附加到复选框,因此可以通过数据库ID#删除它们。最终,我添加了ID
的新列,并尝试将其宽度设置为0,或者将其可见性设置为隐藏或折叠,但是如果该值不可见,则找不到ID。这是要填充的代码:
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
等,但是找不到如何将ID附加到复选框,这样我就不必在视图中添加任何内容。
这是我用来删除的内容,同样,除非该列可见,否则它无法找到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();
}
}
}
答案 0 :(得分:1)
当已经有数据项引用时,为什么还要打扰UI元素?在用户与UI互动(例如,单击CheckBoxes)之后,数据项的属性会通过绑定进行更新
htmlDoc.querySelector("#RatingsTable1 tr:last-child").innerText
如果ItemsSource是ObservableCollection,则无需重新加载所有数据就可以从其中删除项目(以及由于INotifyCollectionChanged而从DataGrid中删除项目)。