2015-02-11 3 views
0

У меня есть gridview, который содержит данные из базы данных. У меня динамически создаются флажки для каждой строки. Я хочу, когда я нажму кнопку «удалить выбранный», флажки, которые были отмечены, будут удалены. Но строки не удаляются, когда я нажимаю кнопку. Вот код кнопки:Удалить выбранные динамические флажки в Gridview ASP.NET

protected void btnDeleteSelectedServiceProvidersLocations_Click(object sender, EventArgs e) 
    { 
     int x = 102; 
     string delete; 
     foreach (GridViewRow grow in gvServiceProviders.Rows) 
     { 
      delete = Request.Form["gvServiceProviders$ct" + x + "$cbSelect"]; 
      if (delete != null || delete == "on" || delete == "y") 
      { 
       bll.ServiceProviderLocationID = grow.Cells[1].Text; 
       bll.IsDeleted = "y"; 
       bll.ServiceProviderLocationDelete(); 
      } 
      x++; 
     } 
     gvServiceProviders.DataSource = bll.GetServiceProviderLocations(); 
     gvServiceProviders.DataBind(); 
    } 

Сетка решетки находится внутри панели обновления, если это помогает. И я использую трехуровневый подход.

ASPX код:

<div ID="gridView"> 
    <asp:GridView ID="gvServiceProviders" runat="server"> 
      <Columns> 
        <asp:templatefield HeaderText="Select"> 
         <itemtemplate> 
           <asp:CheckBox ID="cbSelect" runat="server"/> 
         </itemtemplate> 
        </asp:templatefield> 
      </Columns> 
    </asp:GridView> 
</div> 
+0

Значит, вы просто хотите удалить выбранные флажки из сетки? А также добавьте код страницы aspx. –

+0

Yup yup. Кроме того, gridview привязан внутри оператора! Page.IsPostBack на странице Load. –

ответ

1
Try this code: 
protected void btnDelete_Click(object sender, EventArgs e) 
{ 
foreach (GridViewRow gvrow in gvDetails.Rows) 
{ 
//Finiding checkbox control in gridview for particular row 
CheckBox chkdelete = (CheckBox)gvrow.FindControl("chkSelect"); 
//Condition to check checkbox selected or not 
if (chkdelete.Checked) 
{ 
//Getting UserId of particular row using datakey value 
int usrid = Convert.ToInt32(gvDetails.DataKeys[gvrow.RowIndex].Value); 
using (SqlConnection con = new SqlConnection("Data Source=Test;Integrated Security=true;Initial Catalog=MySampleDB")) 
{ 
con.Open(); 
SqlCommand cmd = new SqlCommand("delete from UserDetails where UserId=" + usrid, con); 
cmd.ExecuteNonQuery(); 
con.Close(); 
} 
} 
} 
+0

Это сработало! Забавно, как я пробовал этот код раньше. Но до того, как привязка данных была вне инструкции postback. Большое спасибо! –

2

Вы хотите удалить данные, когда флажок, то вы можете сделать, как показано ниже,

foreach (GridViewRow grow in gvServiceProviders.Rows) 
    { 
     //Make sure it is datarow 
     if(grow.RowType = RowType.DataControlRowType.DataRow) 
     { 
      //Finiding checkbox control in gridview for particular row 
      CheckBox chkdelete = (CheckBox)grow.FindControl("cbSelect"); 

      //Make sure if checkbox is selected for the processing row 
      if(chkdelete.Checked) 
      { 
      //Getting your datakey value 
      bll.ServiceProviderLocationID = Convert.ToInt32(gvServiceProviders.DataKeys[grow.RowIndex].Value); 
      bll.IsDeleted = "y"; 
      bll.ServiceProviderLocationDelete(); 
      }    
     } 
    } 
    gvServiceProviders.DataSource = bll.GetServiceProviderLocations(); 
    gvServiceProviders.DataBind(); 

Поскольку это использует datakey из в gridview вам нужно установить свойство gridview с параметром LocationID DataKey.

+0

Это то же решение @vignesh. Это также работает. Большое спасибо! –

Смежные вопросы