Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在按钮上从数据库中删除行单击wpf c#sql_C#_Sql_.net_Wpf - Fatal编程技术网

如何在按钮上从数据库中删除行单击wpf c#sql

如何在按钮上从数据库中删除行单击wpf c#sql,c#,sql,.net,wpf,C#,Sql,.net,Wpf,下午好,我正在尝试从datatable和数据库中删除一行。目前,我可以从c#应用程序前端的数据表中删除一行。当我单击delete按钮时,我还需要从数据库中删除该行。我遇到的问题是,我不知道如何访问每行中的实际元素。当我将Console.WriteLine列为行时,输出为System.Data.DataRowView。我的目的是如果我可以访问数据行的元素,我可以编写一个sql语句来根据行id删除该行。任何帮助都将不胜感激 MainWindow.xaml Window x:Class="B

下午好,我正在尝试从datatable和数据库中删除一行。目前,我可以从c#应用程序前端的数据表中删除一行。当我单击delete按钮时,我还需要从数据库中删除该行。我遇到的问题是,我不知道如何访问每行中的实际元素。当我将Console.WriteLine列为行时,输出为System.Data.DataRowView。我的目的是如果我可以访问数据行的元素,我可以编写一个sql语句来根据行id删除该行。任何帮助都将不胜感激

MainWindow.xaml

Window x:Class="BagRoom.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BagRoom"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Grid>
        <TextBlock HorizontalAlignment="Left" Margin="350,20,0,0" TextWrapping="Wrap" Text="Bag Room Lookup" VerticalAlignment="Top"/>
        <TextBox Name="target" HorizontalAlignment="Left" Height="25" Margin="270,50,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="250"/>
        <DataGrid Name="bagRoomGrid" HorizontalAlignment="Center" Height="300" Margin="0,119,0,0" VerticalAlignment="Center" Width="792">
            <DataGrid.Columns>
                <!-- ... -->
                <DataGridTemplateColumn Header="Delete">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="delete" Content="Delete" Click="DeleteRow"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Button Click="showTable" Content="Show Table" HorizontalAlignment="Left" Margin="270,80,0,0" VerticalAlignment="Top" Width="75"/>
        <Button Click="Window_Loaded" Content="Lookup" HorizontalAlignment="Left" Margin="525,50,0,0" VerticalAlignment="Top" Width="75"/>
        <Button Click="addPlayer" Content="Add Player" HorizontalAlignment="Left" Margin="345,80,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>
</Window>
“Id”是数据库表中的主键列

    private void DeleteRow(object sender, RoutedEventArgs e)
    {
        DataRowView row = (DataRowView)bagRoomGrid.SelectedItem;
        row.Delete();

        int rowsAffected;
        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("DELETE Team WHERE Id = " + row["Id"], conn);
            cmd.Connection.Open();
            rowsAffected = cmd.ExecuteNonQuery();
        }
        if (rowsAffected > 0)
            dt.AcceptChanges();
        else
            dt.RejectChanges();
    }

您使用的是SQL Server,因此文档就在这里。这与您在c#中使用的字符串相同:@jdweng我认为我需要从c#中的行中获取元素,然后才能从数据库中删除它们。您通常使用Where进行删除,并一次删除一个ID。因此,是的,您可能首先需要查询数据库以获取ID。@jdweng是的,那么您知道如何访问行中的元素,以便它不会返回System.Data.DataRowView?请参阅下面的内容。读卡器是一个数组,因此您可以按索引或名称访问列:reader[索引或字符串]:
    private void DeleteRow(object sender, RoutedEventArgs e)
    {
        DataRowView row = (DataRowView)bagRoomGrid.SelectedItem;
        row.Delete();

        int rowsAffected;
        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("DELETE Team WHERE Id = " + row["Id"], conn);
            cmd.Connection.Open();
            rowsAffected = cmd.ExecuteNonQuery();
        }
        if (rowsAffected > 0)
            dt.AcceptChanges();
        else
            dt.RejectChanges();
    }