直接在DataGrid中插入、更新和删除行,并将更改保存在数据库中



我有一个ListView,其中包含SQL Server数据库中的表列表。我的列表视图项还有一个Selected事件,它用数据库中的表填充我的DataGrid

我希望用户能够在所选表中INSERT, UPDATE, & DELETE行,并将这些更改保存到数据库中。

这是我在选择ListView项目时填充DataGrid的代码。我删除了一些以避免太长时间:

public partial class TableManagement : UserControl
{
public TableManagement()
{
InitializeComponent();
}

private void CustomerContact_Selected(object sender, RoutedEventArgs e)
{
try
{
string connectionString = ("Data Source=WINDOWS-B1AT5HC\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter cmd = new SqlDataAdapter("SELECT [TXT_CUST_CNT], [Inactive] FROM [hb_CustCntct] ", connection);
cmd.Fill(dt);
dt.AcceptChanges();
dt_TableManagement.DataContext = dt;
dt_TableManagement.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

这是我的listVeiwDataGridXMAL代码

<!--Grid 1-->
<Grid x:Name="Grid1" Grid.Row="1" Grid.Column="0" Margin="15">
<ListView>
<ListViewItem x:Name="CustomerContact" Content="Customer Contact" Selected="CustomerContact_Selected"/>
<ListViewItem x:Name="CsrNames" Content="Customer Service Representative Names" Selected="CsrNames_Selected"/>
<ListViewItem x:Name="DisputeClassification" Content="Dispute Classification" Selected="DisputeClassification_Selected"/>
<ListViewItem x:Name="DisputeStatus" Content="Dispute Status" Selected="DisputeStatus_Selected"/>
<ListViewItem x:Name="FinancialAdjustment" Content="Financial Adjustment" Selected="FinancialAdjustment_Selected"/>
<ListViewItem x:Name="InitialCallAnalysis" Content="Initial Call Analysis" Selected="InitialCallAnalysis_Selected"/>
<ListViewItem x:Name="InitialCallReason" Content="Initial Call Reason" Selected="InitialCallReason_Selected"/>
<ListViewItem x:Name="MeterIssue" Content="Meter Issue" Selected="MeterIssue_Selected"/>
<ListViewItem x:Name="OpenInError" Content="Open In Error" Selected="OpenInError_Selected"/>
<ListViewItem x:Name="PrimaryCause" Content="Primary Cause" Selected="PrimaryCause_Selected"/>
<ListViewItem x:Name="RequestedWork" Content="Requested Work" Selected="RequestedWork_Selected"/>
<ListViewItem x:Name="RevenueClass" Content="Revenue Class" Selected="RevenueClass_Selected"/>
<ListViewItem x:Name="ServiceOrderDetails" Content="Service Order Details" Selected="ServiceOrderDetails_Selected"/>
<ListViewItem x:Name="ServiceOrderType" Content="Service Order Type" Selected="ServiceOrderType_Selected"/>
<ListViewItem x:Name="ServiceOrderAdjustment" Content="Service Order Adjusted" Selected="ServiceOrderAdjustment_Selected"/>
<ListViewItem x:Name="UnderlyingCause" Content="Underlying Cause" Selected="UnderlyingCause_Selected"/>
<ListViewItem x:Name="UtilityReportType" Content="Utility Report Type" Selected="UtilityReportType_Selected"/>
<ListViewItem x:Name="WFMIssuedBy" Content="WFM Issued By" Selected="WFMIssuedBy_Selected"/>
</ListView> 
</Grid>
<!--Grid 2-->
<Grid x:Name="Grid2" Grid.Row="1" Grid.Column="2" Margin="15">
<DataGrid x:Name="dt_TableManagement"
materialDesign:ListBoxAssist.IsToggle="True"
Background="White"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ItemsSource="{Binding}">
</DataGrid>
</Grid>

为了让它变得非常简单,您可以使用DataAdapter来设置SELECT、INSERT、UPDATE和DELETE命令。

因此,在DataAdapter填充DataSet/DataTable而不是直接使用命令之后,它将能够自动检测更改的条目更改,并在您只调用DataAdapter的Update方法时使用适当的方法(INSERT/UPDATE/DELETE(。

DataAdapterFill方法,使用"SELECT"命令,Update命令基于DataRow的RowState属性使用insert/update/delete。所以,当您删除/添加/修改行时,它只会改变它的状态。在AcceptChanges之前,行的状态将以某种方式"更改"——DataAdapterUpdate方法实际上就是这样做的。例如,您使用DataAdapter填充了一些数据表,然后删除了一些DataRow——该行仍然存在于datatable中,但处于"已删除"状态。现在,当您使用刚刚修改的DataTable参数执行数据适配器的"Update"方法时,dataadapter会查找以某种方式修改的行,并为这些行执行正确的SQL命令(在本例中为DeleteCommand(。

要使用所有命令,必须设置SqlDataAdapter的正确属性

  • UpdateCommand
  • InsertCommand
  • DeleteCommand

最新更新