【问题标题】:Why record is not deleting from grid为什么记录没有从网格中删除
【发布时间】:2014-05-02 09:51:38
【问题描述】:

我在 gridview 中使用了复选框。

我试图在单击按钮时从 gridview 中删除选中的记录。但它没有删除记录。

我正在尝试但没有发现我做错了什么。

这是我的代码--

网格代码-

<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="cbRows" runat="server"  />    
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkdelete" 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>

我的 default.aspx.cs

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("chkdelete");
        if (chkdelete.Checked)
        {
            string name= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex].Values["Name"].ToString());
            deleteRecordByName(name);
        }
    }
    fillLanguageGrid();
}

public void deleteRecordByName(string Name)
{
    string strcon = ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString;
    SqlConnection sqlConnection = new SqlConnection(strcon);
    SqlDataAdapter da = new SqlDataAdapter("hrm_DeleteLanguages2", sqlConnection);
    da.SelectCommand.CommandType = CommandType.StoredProcedure;
    da.SelectCommand.Parameters.Add(new SqlParameter("@Name",SqlDbType.VarChar));
    da.SelectCommand.Parameters["@Name"].Value= Name;
    sqlConnection.Open();
    da.SelectCommand.ExecuteNonQuery();
    sqlConnection.Dispose();
}

存储过程代码-

    CREATE PROCEDURE hrm_DeleteLanguages2
       @name varchar(120)        
AS 
BEGIN 


     DELETE 
     FROM   [HRMS].[dbo].[Languages]
     WHERE  
     Name = @name

END

这是网格的快照-

【问题讨论】:

    标签: asp.net sql-server gridview stored-procedures


    【解决方案1】:

    您到底为什么要创建SqlDataAdapter 并指定SelectCommand 来删除某些内容?!?!?一点意义都没有……

    尝试更简单的方法:

    public void deleteRecordByName(string Name)
    {
        string strcon = ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString;
    
        // create a SqlConnection and a SqlCommand to delete the data in a using().... block
        using (SqlConnection sqlConnection = new SqlConnection(strcon))
        using (SqlCommand cmd = new SqlCommand("dbo.hrm_DeleteLanguages2", sqlConnection)) 
        {
             // define this to be a stored procedure
             cmd.CommandType = CommandType.StoredProcedure;
    
             // 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();
             cmd.ExecuteNonQuery();
             sqlConnection.Dispose();
        }
    }
    

    如果您坚持使用SqlDataAdapter,那么请至少使用适当的DeleteCommand 来删除行 - 不要'不要滥用SelectCommand 来删除数据!

    【讨论】:

    • @AzharShahid:想解释一下如何它不起作用?它什么都不做吗?删除一行后 - 你在刷新你的数据???
    • 点击按钮时,复选框变为未选中,但数据保持不变。
    • 你检查过你的数据库表了吗?数据还在吗?也许你的存储过程并没有真正删除任何东西......
    • 您在寻找正确的数据库吗?存储过程从HRMS 数据库中的dbo.Languages 表中删除 - 您是否也在从那里获取数据???
    【解决方案2】:

    不要在页面加载事件上绑定网格视图。

    当您选择复选框并单击按钮时。首先执行页面加载事件。在页面加载选择时,您的所有 Checkbox 都会被删除,然后执行您的点击事件代码。

    从页面加载中删除网格视图绑定。将此代码保留在点击事件上。

    【讨论】:

      【解决方案3】:
      protected void btnDelete_Click(object sender, EventArgs e)
      {
          foreach (GridViewRow gvrow in GridView1.Rows)
          {
              CheckBox chkdelete = (CheckBox)gvrow.FindControl("chkdelete");
              if (chkdelete.Checked)
              {
                  string name= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex]["Name"].ToString());
                  deleteRecordByName(name);
              }
          }
          fillLanguageGrid();
      }
      

      【讨论】:

      • 字符串名称= Convert.ToString(GridView1.DataKeys[gvrow.RowIndex]["Name"].ToString());
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2018-11-20
      • 2010-12-28
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多