【问题标题】:Using Auto Increment ID with ASP.NET checkbox list将自动增量 ID 与 ASP.NET 复选框列表一起使用
【发布时间】:2013-04-30 20:05:43
【问题描述】:

首先,我对编程很陌生,因此对细节的关注是值得赞赏的。

我目前有一个从 SQL 表接收数据的 asp 复选框列表。我遇到了一个问题,如果有 2 个项目完全相同,我的删除功能将删除这两个项目。以下是相关代码:

protected void btn_remove_Click(object sender, EventArgs e)        
{            
    for (int i = 0; i < UPCList.Items.Count; i++)            
    {                
        if (UPCList.Items[i].Selected)                
        {                    
            var item = UPCList.Items[i];                    
            var frcID = item.Value;                    
            _itemNumberRepository.Delete(frcID);                
        }            
    }             
    Response.Redirect("WebForm2.aspx");            
    Response.End();        
}
public string Delete(string itemCode)        
{            
    string connectionString = foobar             
    Int32 returnDeleted = 0;             
    string deleteUpcCode =            
    "DELETE FROM compare1 "            
    + string.Format("WHERE itemcode = '{0}'",itemCode);  

    using (SqlConnection connection = new SqlConnection(connectionString))            
    {                
        SqlCommand command = new SqlCommand(deleteUpcCode, connection);                
        command.Connection.Open();                
        returnDeleted = command.ExecuteNonQuery();                
        command.Connection.Close();            
    }            
    return returnDeleted.ToString();        
}

有人告诉我使用 SQL 中的自动递增 ID,这样每一行都会有一个唯一的 ID,这样我就可以只删除选定的行。但是,我什至不知道如何做到这一点。我已经在 SQL 中为 itemcode 列打开了标识选项,但除此之外,我迷路了。如何使用该 ID 从 asp 中的复选框列表中仅删除选定的项目?

【问题讨论】:

  • 将记录插入表时会自动生成Id。您只需要在您的 ASP 代码中使用这些 ID 号 (&lt;input type="checkbox" id="&lt;%myIDVariable%&gt;"&gt;) 然后根据该 ID 删除。
  • 只是另一个友好的提醒,以这种方式创建 DELETE 查询(没有参数化)是一个坏主意:)
  • 其他一些小事:Delete 方法不需要返回任何东西,它可以只是一个voidaddUpcCode 变量的名称应该不同。
  • 我这样做是因为我试图返回受 SQL 影响的行数并且失败得很惨。那是我这样做的尝试。这将是我接下来要做的事情......对于 addUpcCode......这是我复制/粘贴的好证据:P

标签: asp.net sql auto-increment checkboxlist


【解决方案1】:

当您说商品“完全相同”时,您的意思是它们具有相同的商品代码吗?并且项目代码允许在您的系统中重复(即这是正确的业务规则)?

如果是这样,这就是为什么您需要为每一行自动生成一个 ID,以便每一行都是唯一的。这意味着您需要在 DELETE 查询中使用该 ID 而不是商品代码。

通常,在 (ASP.NET) Web 应用程序中,这类事情是通过“网格”完成的。您可以将GridView 与两列一起使用:一列是复选框,另一列只是显示项目代码的标签。每行都绑定到 ID 字段。

所以,我建议您首先查看GridView(网上有很多示例):MSDN documentation for GridView

【讨论】:

  • 也许更好的主意是不允许重复。你会建议一种实现它的好方法吗?如果没有很好的方法,那么gridview可能是最好的选择。
  • 如果您不想允许具有重复名称的条目,那么您只需在插入/更新数据库中的记录和/或在数据库中使用 UNIQUE 约束之前进行检查。如果您只使用唯一约束,那么您需要准备处理异常(我相信如果试图违反唯一约束,ADO.NET 会抛出异常)
  • 无论如何,gridview 之类的选项比复选框列表更丰富。
猜你喜欢
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2017-06-21
  • 2011-08-02
  • 2013-06-05
相关资源
最近更新 更多