Я использовал флажок в 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

Вот снимок сетки-

enter image description here

0
Azhar Shahid 2 Май 2014 в 13:51

3 ответа

Лучший ответ

Не привязывать Grid View к событию загрузки страницы.

Когда вы выбираете флажок и нажимаете кнопку. Сначала выполняет событие загрузки страницы. При загрузке страницы все ваши флажки удаляются, а затем выполняется код события щелчка.

Удалите привязку представления сетки из загрузки страницы. Сохраните этот код при событии щелчка.

1
user3189944user3189944 12 Май 2014 в 06:08

Зачем вы создаете 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 для удаления данных!

2
marc_s 2 Май 2014 в 10:16
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();
}
0
senthilkumar2185 2 Май 2014 в 10:40