C# 如何使用asp中继器控件中的复选框删除按钮?

C# 如何使用asp中继器控件中的复选框删除按钮?,c#,asp.net,C#,Asp.net,嗨,有人能帮我吗。我的目标是允许用户删除数据库中称为“messages”的多行 通过选中复选框,用户可以在按下按钮后删除多行 但是,当我使用下面的代码时,什么也不会发生。有人能帮我看看我的密码有没有问题吗?谢谢=) 源代码 <%@ Page Title="" Language="C#" MasterPageFile="~/MainMasterPage.master" AutoEventWireup="true" CodeFile="Messages.aspx.cs" Inherits="M

嗨,有人能帮我吗。我的目标是允许用户删除数据库中称为“messages”的多行

通过选中复选框,用户可以在按下按钮后删除多行

但是,当我使用下面的代码时,什么也不会发生。有人能帮我看看我的密码有没有问题吗?谢谢=)

源代码

<%@ Page Title="" Language="C#" MasterPageFile="~/MainMasterPage.master" AutoEventWireup="true" CodeFile="Messages.aspx.cs" Inherits="Messages" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<SCRIPT runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
    String userLog = Session["loginuser"].ToString();
    if (!IsPostBack)
    {
        LoadData();


    }
}
public void LoadData()
{
String userLog = Session["loginuser"].ToString();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Messages WHERE receiver = '" + userLog + "'",
    "server=19-20\\sqlexpress;database=mpsip;Integrated Security=SSPI");
DataTable table = new DataTable();
adapter.Fill(table);
Repeater1.DataSource = table;
Repeater1.DataBind();

PagedDataSource pds = new PagedDataSource();
pds.DataSource = table.DefaultView;
pds.AllowPaging = true;
pds.PageSize = 10;

int currentPage;

if (Request.QueryString["page"] != null)
{
    currentPage = Int32.Parse(Request.QueryString["page"]);
}
else
{
    currentPage = 1;
}

pds.CurrentPageIndex = currentPage - 1;
Label1.Text = "Page " + currentPage + " of " + pds.PageCount;

if (!pds.IsFirstPage)
{
    linkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage - 1);
}

if (!pds.IsLastPage)
{
    linkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage + 1);
}

Repeater1.DataSource = pds;
Repeater1.DataBind(); 

私有无效页面加载(对象发送方,System.EventArgs e)
{
字符串userLog=Session[“loginuser”].ToString();
如果(!IsPostBack)
{
LoadData();
}
}
公共void LoadData()
{
字符串userLog=Session[“loginuser”].ToString();
SqlDataAdapter=new SqlDataAdapter(“从消息中选择*,其中receiver='”+userLog+'”,
“服务器=19-20\\sqlexpress;数据库=mpsip;集成安全=SSPI”);
DataTable=新的DataTable();
适配器。填充(表格);
Repeater1.DataSource=表;
Repeater1.DataBind();
PagedDataSource pds=新的PagedDataSource();
pds.DataSource=table.DefaultView;
pds.allowpage=true;
pds.PageSize=10;
int当前页面;
if(Request.QueryString[“page”!=null)
{
currentPage=Int32.Parse(Request.QueryString[“page]”);
}
其他的
{
currentPage=1;
}
pds.CurrentPageIndex=currentPage-1;
Label1.Text=“Page”+currentPage+”共“+pds.PageCount;
如果(!pds.IsFirstPage)
{
linkPrev.NavigateUrl=Request.CurrentExecutionFilePath+“?page=“+(currentPage-1);
}
如果(!pds.IsLastPage)
{
linkNext.NavigateUrl=Request.CurrentExecutionFilePath+“?page=“+(currentPage+1);
}
Repeater1.DataSource=pds;
Repeater1.DataBind();
}



从用户ID:
日期:
消息ID:


上一页 下一页




protectedvoid按钮7\u单击(对象发送者,事件参数e)
{
使用(SqlConnection conn=newsqlconnection(“数据源=19-20\\sqlexpress;“+”初始目录=mpsip;集成安全=SSPI”))
{
conn.Open();
SqlCommand cmdDel=conn.CreateCommand();
SqlTransaction=conn.BeginTransaction(“MyTransaction”);
cmdDel.Connection=conn;
cmdDel.Transaction=事务;
尝试
{
对于(int i=0;i

}

您的代码有问题,在这一行:

mysql = "delete from messages where messageID = '" + CheckBox1.Checked + "'";
cmdDel.ExecuteNonQuery();
应该是:

mysql = "delete from messages where messageID = '" + ((YourClass)Repeater1.Items[i].DataItem).messageID + "'";
您应该使用而不是连接字符串

此外,SqlCommand未执行,您应该添加以下行:

mysql = "delete from messages where messageID = '" + CheckBox1.Checked + "'";
cmdDel.ExecuteNonQuery();
删除邮件后必须重新加载数据

此外,您应该在for循环外初始化SqlConnection对象,并使用SqlTransaction来管理事务

 using (SqlConnection conn = new SqlConnection("Data Source=19-20\\sqlexpress;" + "Initial Catalog = mpsip; Integrated Security = SSPI"))
 {     
    conn.Open();
    SqlCommand cmdDel = conn.CreateCommand();
    SqlTransaction transaction = conn.BeginTransaction("MyTransaction");
    cmdDel.Connection = conn;
    cmdDel.Transaction = transaction;
    try {
        for (int i = 0; i < Repeater1.Items.Count; i++)
        { 
         //This assumes data type of messageID is integer, change (int) to the right type
         cmdDel.CommandText = "delete from messages where messageID = '" + ((int)((DataRow)Repeater1.Items[i].DataItem)["messageID"]) + "'";
         cmdDel.ExecuteNonQuery();

         // Continue your code here

         }
         transaction.Commit();
         //TODO: reload data here and binding to Repeater
    }
    catch(Exception ex) {
        try {
            transaction.Rollback();
        }
        catch(Exception ex1) {
            //TODO: write log
        }
    }
}
使用(SqlConnection conn=newsqlconnection(“数据源=19-20\\sqlexpress;“+”初始目录=mpsip;集成安全=SSPI”))
{     
conn.Open();
SqlCommand cmdDel=conn.CreateCommand();
SqlTransaction=conn.BeginTransaction(“MyTransaction”);
cmdDel.Connection=conn;
cmdDel.Transaction=事务;
试一试{
对于(int i=0;i
您的代码有问题,在这一行:

mysql = "delete from messages where messageID = '" + CheckBox1.Checked + "'";
cmdDel.ExecuteNonQuery();
应该是:

mysql = "delete from messages where messageID = '" + ((YourClass)Repeater1.Items[i].DataItem).messageID + "'";
您应该使用而不是连接字符串

此外,SqlCommand未执行,您应该添加以下行:

mysql = "delete from messages where messageID = '" + CheckBox1.Checked + "'";
cmdDel.ExecuteNonQuery();
删除邮件后必须重新加载数据

此外,您应该在for循环外初始化SqlConnection对象,并使用SqlTransaction来管理事务

 using (SqlConnection conn = new SqlConnection("Data Source=19-20\\sqlexpress;" + "Initial Catalog = mpsip; Integrated Security = SSPI"))
 {     
    conn.Open();
    SqlCommand cmdDel = conn.CreateCommand();
    SqlTransaction transaction = conn.BeginTransaction("MyTransaction");
    cmdDel.Connection = conn;
    cmdDel.Transaction = transaction;
    try {
        for (int i = 0; i < Repeater1.Items.Count; i++)
        { 
         //This assumes data type of messageID is integer, change (int) to the right type
         cmdDel.CommandText = "delete from messages where messageID = '" + ((int)((DataRow)Repeater1.Items[i].DataItem)["messageID"]) + "'";
         cmdDel.ExecuteNonQuery();

         // Continue your code here

         }
         transaction.Commit();
         //TODO: reload data here and binding to Repeater
    }
    catch(Exception ex) {
        try {
            transaction.Rollback();
        }
        catch(Exception ex1) {
            //TODO: write log
        }
    }
}
使用(SqlConnection conn=newsqlconnection(“数据源=19-20\\sqlexpress;“+”初始目录=mpsip;集成安全=SSPI”))
{     
conn.Open();
SqlCommand cmdDel=conn.CreateCommand();
SqlTransaction=conn.BeginTransaction(“MyTransaction”);
cmdDel.Connection=conn;
cmdDel.Transaction=事务;
试一试{
对于(int i=0;i