繁体   English   中英

从选定的GridView和数据库中删除行

[英]delete row from selected gridview and database

我正在尝试从gridview和数据库中删除一行...如果在gridview中单击一个delte linkbutton,则应将其删除。.我正在获取行索引,如下所示:

protected void LinkButton1_Click(object sender, EventArgs e)
{
  LinkButton btn = (LinkButton)sender;
  GridViewRow row = (GridViewRow)btn.NamingContainer;
  if (row != null)
  {
    LinkButton LinkButton1 = (LinkButton)sender;

    // Get reference to the row that hold the button
    GridViewRow gvr = (GridViewRow)LinkButton1.NamingContainer;

    // Get row index from the row
    int rowIndex = gvr.RowIndex;
    string str = rowIndex.ToString();
    //string str = GridView1.DataKeys[row.RowIndex].Value.ToString();
    RemoveData(str); //call the delete method

  }
}

现在我想删除它.​​..所以我在这段代码上有问题..我收到一个错误

必须声明标量变量“ @original_MachineGroupName” ...任何建议

private void RemoveData(string item)
{
  SqlConnection conn = new SqlConnection(@"Data Source=JAGMIT-PC\SQLEXPRESS;
  Initial Catalog=SumooHAgentDB;Integrated Security=True");
  string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
                @original_MachineGroupID;
  SqlCommand cmd = new SqlCommand(sql, conn);
  cmd.Parameters.AddWithValue("@original_MachineGroupID", item);

  conn.Open();

  cmd.ExecuteNonQuery();
  conn.Close();
}

块引用

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
  ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
    SelectCommand="SELECT MachineGroups.MachineGroupID, MachineGroups.MachineGroupName,
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted, COUNT(Machines.MachineName) AS Expr1, 
    DATENAME(month, (MachineGroups.TimeAdded - 599266080000000000) / 864000000000) + 
    SPACE(1) + DATENAME(d, (MachineGroups.TimeAdded - 599266080000000000) / 
     864000000000) + 
    ', ' + DATENAME(year, (MachineGroups.TimeAdded - 599266080000000000) /
    864000000000) AS Expr2 FROM MachineGroups FULL OUTER JOIN Machines ON 
    Machines.MachineGroupID = MachineGroups.MachineGroupID GROUP BY 
    MachineGroups.MachineGroupID, MachineGroups.MachineGroupName, 
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted" 
  DeleteCommand="DELETE FROM [MachineGroups] WHERE 
                  [MachineGroupID] =@original_MachineGroupID" >
        <DeleteParameters>
            <asp:Parameter Name="@original_MachineGroupID" Type="Int16" />
            <asp:Parameter Name="@original_MachineGroupName" Type="String" />
            <asp:Parameter Name="@original_MachineGroupDesc" Type="String" />
            <asp:Parameter Name="@original_CanBeDeleted" Type="Boolean" />
            <asp:Parameter Name="@original_TimeAdded" Type="Int64" />
        </DeleteParameters>   
</asp:SqlDataSource>

我仍然收到一个错误:必须声明标量变量“ @original_MachineGroupID

您没有在查询中添加@original_MachineGroupName参数。 您的查询引用了多个变量,而您仅添加了其中一个。

cmd.Parameters.AddWithValue("@original_MachineGroupID", item);
cmd.Parameters.AddWithValue("@original_MachineGroupName", itemName);
cmd.Parameters.AddWithValue("@original_MachineGroupDesc", itemDesc);
cmd.Parameters.AddWithValue("@original_CanBeDeleted", true);
cmd.Parameters.AddWithValue("@original_TimeAdded", time);

您将需要找到额外的信息来满足您的查询,或者更改查询以消除对它们的需求。

您在查询中有几个参数,即@original_MachineGroupName,但仅向您的命令对象添加一个实际参数。 查询中的每个参数都需要一个。

如果传递给方法的字符串是表中的主键或唯一键,则以下代码将从数据库中删除该行:

string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
                  @original_MachineGroupID";
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item);

还要注意您的数据绑定。 如果从数据库中删除行,则不会从gridview中删除数据。 您将需要重新获取数据并再次对其进行数据绑定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM