我的wpf项目中有一个DataGrid,它绑定到数据源并成功填充值。现在的问题是,当用户删除行时,我该如何回应。我也想删除数据库中的同一行。我的方法是从当前所选行的lbId
列获取id,并在用户按下键盘上的Delete按钮或GUI中的Delete Button
时发出DELETE查询。我该怎么做?
或者在Winforms UserDeletingRow
中没有像DataGridView
这样的东西吗?
这是XAML
<DataGrid AutoGenerateColumns="False" Height="430" HorizontalAlignment="Left" Margin="378,61,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="550" ItemsSource="{Binding Path=LocalBookmarks}" CanUserReorderColumns="False" CanUserSortColumns="False" Grid.Row="5" RowEditEnding="datagrid1_RowEditEnding" DataGridRow.Selected="datagrid1_RowSelected">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Width="20" Binding="{Binding Path=lbId}" CanUserResize="False"></DataGridTextColumn>
<DataGridTextColumn Header="Title" Width="225" Binding="{Binding Path=TitleOfPage}" MaxWidth="250" CanUserResize="True"></DataGridTextColumn>
<DataGridHyperlinkColumn CanUserResize="True" Header="Link" MaxWidth="300" MinWidth="250" Binding="{Binding Path=SiteAddress}"/>
<DataGridTextColumn Header="Saved On" Width="70" Binding="{Binding Path=DateAdded}" CanUserResize="True"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
这是DataGrid的图像。
这是绑定代码:
private void BindToData(SqlCeConnectionManger s, int gt, int lt)
{
SqlCeDataAdapter sda = new SqlCeDataAdapter("SELECT * FROM LocalBookmarks WHERE lbId > " + gt.ToString() + " AND lbId < " + lt.ToString() + " ORDER BY DateAdded DESC", s.SqlCeCon);
DataSet dataset = new DataSet();
sda.Fill(dataset, "LocalBookmarks");
dataGrid1.DataContext = dataset;
s.SqlCeCon.Close();
}
任何帮助将不胜感激。
答案 0 :(得分:1)
您是否尝试添加包含按钮的列?该按钮将具有能够识别密钥的参数。然后编程按钮进行验证,从列表中删除,从数据库中删除,然后刷新数据网格。我使用带有c#和XML的mvvm,但没有代码。查看onpropertychanged(“propertyname”)。
答案 1 :(得分:1)
我来到这里的是一个相对较晚的帖子/答案,寻找其他的东西......
Sub dg_RowEditEnding(sender As Object, e As DataGridRowEditEndingEventArgs) Handles dg.RowEditEnding
这是我用来将数据网格与数据库后端同步的事件...
答案 2 :(得分:0)
如果绑定到ado.net数据集/数据表,如果使用单击“Del”,它将自动从数据集/数据表中删除。
然后,您只需在TabelAdapter上调用Update以获取对数据库的更改。
编辑:顺便说一句,只要你没有调用AcceptChanges就可以调用“RejectChanges”来获取已删除的行。