从DataGridView以及数据库中删除任何行

时间:2014-05-10 15:07:17

标签: c# winforms datagridview delete-row

我想从DataGridView以及数据库中删除所选行。我的代码仅适用于第一行,对于每个其他行,它提供异常"索引超出范围"。

        SqlConnection con = new SqlConnection(conString);
        SqlCommand cmd = new SqlCommand();
        string itemId;
        if (dgPartyDetails.SelectedCells.Count > 0)
        {
            int selectedrowindex = dgPartyDetails.SelectedCells[0].RowIndex;
            try
            {
                DataGridViewRow selectedRow = dgPartyDetails.SelectedRows[selectedrowindex];
                if (selectedRow.Selected == true)
                {
                    dgPartyDetails.Rows.RemoveAt(selectedrowindex);
                    itemId = Convert.ToString(selectedRow.Cells[0].Value);
                    con.Open();
                    cmd.CommandText = "DELETE FROM tblParty WHERE Id=" + itemId + "";
                    cmd.Connection = con;
                    int count = cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }       

2 个答案:

答案 0 :(得分:1)

在获取DataGridRow值之前,您似乎已删除它。

dgPartyDetails.Rows.RemoveAt(selectedrowindex);
itemId = Convert.ToString(selectedRow.Cells[0].Value);

撤销这些陈述的顺序可以解决您的问题。

itemId = Convert.ToString(selectedRow.Cells[0].Value);
dgPartyDetails.Rows.RemoveAt(selectedrowindex);

答案 1 :(得分:0)

也许你可以试试sqldatasource。例如:

<asp:SqlDataSource ID="sdsJur" runat="server" 
           ConnectionString="<%$ ConnectionStrings:NilaiConnectionString %>" 
           DeleteCommand="DELETE FROM [Jurusan] WHERE [Kd_Jurusan] = @Kd_Jurusan" 
           InsertCommand="INSERT INTO [Jurusan] ([Jurusan]) VALUES (@Jurusan)" 
           SelectCommand="SELECT * FROM [Jurusan]" 
           UpdateCommand="UPDATE [Jurusan] SET [Jurusan] = @Jurusan WHERE [Kd_Jurusan] = @Kd_Jurusan">
           <DeleteParameters>
               <asp:Parameter Name="Kd_Jurusan" Type="Int32" />
           </DeleteParameters>
           <InsertParameters>
               <asp:FormParameter FormField="tbJurusan" Name="Jurusan" />
           </InsertParameters>
           <UpdateParameters>
               <asp:Parameter Name="Jurusan" Type="String" />
               <asp:Parameter Name="Kd_Jurusan" Type="Int32" />
           </UpdateParameters>
</asp:SqlDataSource>`

然后你可以使用Gridview(我认为类似于datagrigview)。例如:

<asp:GridView ID="gvJurusan" runat="server" AllowPaging="True" 
     AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Kd_Jurusan"DataSourceID="sdsJur">
     <Columns>
         <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
         <asp:BoundField DataField="Kd_Jurusan" HeaderText="Kd_Jurusan" InsertVisible="False" ReadOnly="True" SortExpression="Kd_Jurusan" />
         <asp:BoundField DataField="Jurusan" HeaderText="Jurusan" SortExpression="Jurusan" />
     </Columns>
</asp:GridView>`

希望它有用