1

选中多个复选框后,如何从数据库中选择多行。这是代码。如果您查看我使用查询字符串的行,则会出现双重请求,我不知道我还需要插入什么。

@{
    var db = Database.Open("Checkbox");
    var sql = "SELECT * FROM Brands";
    var select = db.Query(sql);
    dynamic execute = "";
    List<String> selected = new List<string>();
    int count = 0;
    List<dynamic> exec = new List<dynamic>();


    if(IsPost){
        if(Request["List"] == null){
            Response.Redirect("~/Checkbox");
        }
        selected = Request["List"].Split(',').ToList();

        count = Request["List"].Count();

        var sqls = "SELECT * FROM Brands WHERE Name = @0 OR Name = @1";
        exec = db.Query(sqls, Request["List"], Request["List"]);



}

<!DOCTYPE html>
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  <title>Checkbox Multiple</title> 
</head>
<body>
    @foreach(var values in exec){
        <span>@values.BrandID</span>
    }

    <form method="post" action="">
    @foreach(var item in select){
    <label>@item.Name</label>     
    <input type="checkbox" multiple="multiple" name="List" value="@item.Name"><br>
    }
    <input type="submit" value="Send">    
        </form>
</body>


</html>
4

2 回答 2

0

您可以尝试在查询中使用并构造一个逗号分隔的字符串并将其弹出到查询中。

string inClause = "1, 2, 3";

var sqls = "SELECT * FROM Brands WHERE Name in (" + inClause +")";
于 2012-08-03T14:23:14.927 回答
0

您可以创建一个拆分逗号分隔列表的 SQL 函数

    SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[Split]      
(      
 @RowData varchar(8000),      
 @SplitOn nvarchar(5)      
)       
RETURNS @RtnValue table      
(      
 Id int identity(1,1),      
 Data nvarchar(100)      
)      
AS       
BEGIN      
 Declare @Cnt int      
 Set @Cnt = 1      

 While (Charindex(@SplitOn,@RowData)>0)      
 Begin      
  Insert Into @RtnValue (data)      
  Select      
   Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))      

  Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))      
  Set @Cnt = @Cnt + 1      
 End      

 Insert Into @RtnValue (data)      
 Select Data = ltrim(rtrim(@RowData))      

 Return      
END      

现在您可以将逗号分隔的列表传递给此函数。

假设@configIds ='1,2,3,4,6,17' 它将为每个ID分别插入数据

 INSERT INTO ABC      
(ID,patient_id,created_user,created_date)      
SELECT data, @patient_Id, @created_user, Getdate()FROM Split(@configIds,',')  

或者它可以在更新新的复选框列表选择记录时使用首先删除不在逗号分隔列表中的记录(@configIds)

DELETE FROM ABC WHERE ID IN                     
( SELECT DISTINCT ID FROM ABC WHERE Patient_ID=@patient_Id                                       
AND ID NOT in (SELECT Ltrim(Rtrim(Data)) FROM Split(@configIds,','))                    
)   

更新代码.....

删除块后将Update标志设置为true或根据checkboxlist新选择的记录更新记录

于 2012-09-13T14:08:38.683 回答