Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 未使用复选框从网格中删除记录_Asp.net_Sql Server_Gridview_Stored Procedures_Checkbox - Fatal编程技术网

Asp.net 未使用复选框从网格中删除记录

Asp.net 未使用复选框从网格中删除记录,asp.net,sql-server,gridview,stored-procedures,checkbox,Asp.net,Sql Server,Gridview,Stored Procedures,Checkbox,我正在尝试在选中复选框时从网格中删除记录。但这不是删除记录。我错在哪里。有人帮我查一下 这是我的密码- Default.aspx-- <asp:Button ID="btnAdd" runat="server" Text="Add" onclick="btnAdd_Click" BackColor="#999966" /> <asp:Button ID="btnDelete" runat="server" Text="Delete" onclick="btnDelete

我正在尝试在选中复选框时从网格中删除记录。但这不是删除记录。我错在哪里。有人帮我查一下

这是我的密码-

Default.aspx--

<asp:Button ID="btnAdd" runat="server" Text="Add" onclick="btnAdd_Click" BackColor="#999966" />
    <asp:Button ID="btnDelete" runat="server" Text="Delete" onclick="btnDelete_Click" BackColor="#999966" />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Name" 
        DataSourceID="SqlDataSource1" 
            style="padding: 0px; margin: 0px; border: thin solid #FF9933; width: 500px;" 
            CellPadding="0" EmptyDataText="No records found" ForeColor="#333333" 
            GridLines="None">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <HeaderStyle BackColor="Moccasin" Width="500px" Font-Bold="True" 
            ForeColor="Black" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

        <Columns>
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:CheckBox ID="cbSelectAll" runat="server" onclick="javascript:SelectAllCheckboxes1(this);"  />    
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chk" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        </Columns>   
    </asp:GridView>
    </div>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:HRMSConnectionString %>" 
        SelectCommand="SELECT [Name] FROM [Languages]">
    </asp:SqlDataSource>
string strcon = ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString;
SqlCommand command;
protected void Page_Load(object sender, EventArgs e)
{
    tblAdd.Visible = false;
    Label1.Visible = false;
    GridView1.DataBind();
    if (!Page.IsPostBack)
        {
            fillLanguageGrid();
        }
}

public void fillLanguageGrid()
    {

        GridView1.DataSourceID = "SqlDataSource1";
        GridView1.DataBind();
        GridView1.Visible = true;
    }



protected void btnDelete_Click(object sender, EventArgs e)
{
    foreach (GridViewRow gvrow in GridView1.Rows)
    {
        CheckBox chkdelete = (CheckBox)gvrow.FindControl("chk");
        if (chkdelete.Checked)
        {
            string name= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex].Values["Name"].ToString());
            deleteRecordByName(name);
        }
    }
    fillLanguageGrid();
}

public void deleteRecordByName(string Name)
{

    using (SqlConnection sqlConnection = new SqlConnection(strcon))
    using (SqlCommand cmd = new SqlCommand("[dbo].[hrm_Langauges]", sqlConnection))
    {
       //  define this to be a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar, 50));
        // define the parameter and set its value
        cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar)).Value = Name;

         //open connection, execute DELETE query, close connection
        sqlConnection.Open();
        command.Parameters["@status"].Value = "Delete";
        cmd.ExecuteNonQuery();
        sqlConnection.Dispose();
    }
这是我的存储过程

ALTER PROCEDURE [dbo].[hrm_Langauges]
(
    @Name varchar(120),
    @CreatedOn datetime,
    @UpdatedOn datetime=0,
    @CreatedBy bigint=0,
    @UpdatedBy bigint=0,
    @IsDeleted bit=0,
    @status as varchar(50) = ''
)
AS
BEGIN
    BEGIN TRANSACTION
        DECLARE @ID int;
        SELECT @ID = coalesce((select max(ID) + 1 from Languages), 1)
    COMMIT   

    if(@status = 'Display')
    BEGIN
        SELECT * FROM [dbo].[Languages];
    END
    else if(@status = 'Add')
    BEGIN
        IF EXISTS(SELECT Name FROM [dbo].[Languages] WHERE Name = @Name)
    Begin
    Return 0
    End
    Else
        INSERT INTO [dbo].[Languages](Name, CreatedOn,UpdatedOn,CreatedBy,UpdatedBy,IsDeleted) VALUES(@Name,@CreatedOn,@UpdatedOn,@CreatedBy,@UpdatedBy,@IsDeleted)
    END
    else if(@status = 'Update')
    BEGIN
        UPDATE [dbo].[Languages] Set Name=@Name,UpdatedOn=@UpdatedOn WHERE ID=@ID
    END
    else if(@status = 'Delete')
    BEGIN
        DELETE FROM [dbo].[Languages] WHERE NAME=@NAME
    END
END
这是网格的快照-

<asp:Button ID="btnAdd" runat="server" Text="Add" onclick="btnAdd_Click" BackColor="#999966" />
    <asp:Button ID="btnDelete" runat="server" Text="Delete" onclick="btnDelete_Click" BackColor="#999966" />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Name" 
        DataSourceID="SqlDataSource1" 
            style="padding: 0px; margin: 0px; border: thin solid #FF9933; width: 500px;" 
            CellPadding="0" EmptyDataText="No records found" ForeColor="#333333" 
            GridLines="None">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <HeaderStyle BackColor="Moccasin" Width="500px" Font-Bold="True" 
            ForeColor="Black" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

        <Columns>
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:CheckBox ID="cbSelectAll" runat="server" onclick="javascript:SelectAllCheckboxes1(this);"  />    
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chk" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        </Columns>   
    </asp:GridView>
    </div>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:HRMSConnectionString %>" 
        SelectCommand="SELECT [Name] FROM [Languages]">
    </asp:SqlDataSource>
string strcon = ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString;
SqlCommand command;
protected void Page_Load(object sender, EventArgs e)
{
    tblAdd.Visible = false;
    Label1.Visible = false;
    GridView1.DataBind();
    if (!Page.IsPostBack)
        {
            fillLanguageGrid();
        }
}

public void fillLanguageGrid()
    {

        GridView1.DataSourceID = "SqlDataSource1";
        GridView1.DataBind();
        GridView1.Visible = true;
    }



protected void btnDelete_Click(object sender, EventArgs e)
{
    foreach (GridViewRow gvrow in GridView1.Rows)
    {
        CheckBox chkdelete = (CheckBox)gvrow.FindControl("chk");
        if (chkdelete.Checked)
        {
            string name= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex].Values["Name"].ToString());
            deleteRecordByName(name);
        }
    }
    fillLanguageGrid();
}

public void deleteRecordByName(string Name)
{

    using (SqlConnection sqlConnection = new SqlConnection(strcon))
    using (SqlCommand cmd = new SqlCommand("[dbo].[hrm_Langauges]", sqlConnection))
    {
       //  define this to be a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar, 50));
        // define the parameter and set its value
        cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar)).Value = Name;

         //open connection, execute DELETE query, close connection
        sqlConnection.Open();
        command.Parameters["@status"].Value = "Delete";
        cmd.ExecuteNonQuery();
        sqlConnection.Dispose();
    }

在ASP.NET中,在服务器端控件上引发事件时,页面加载事件始终在控件事件中的代码之前执行

在您的情况下,用户选中复选框,然后按下删除按钮。这将引发页面加载事件,然后引发btnDelete\u Click事件。Page_Load事件重新加载复选框,有效地破坏了用户选中的复选框,然后调用按钮事件代码。但此时选中的复选框是未选中的,因此代码可以正确运行,但不会更改任何内容


更改页面加载事件添加

是否有人帮助我…?快速浏览一下,我会说SQL代码已签出,怀疑将网格值映射到过程参数有问题。在过程中执行一些
INSERT
语句,将传递到单独表中的每个参数的值写入。这样你就可以自己调查这个问题了。此外,在过程的早期增加值时,
更新
可能应该有
其中Name=@Name
,而不是
@ID
上的过滤器。