2013-08-01 1 views
1

У меня есть требование, когда я хочу удалить несколько строк, поставив флажок в каждой строке Я хочу разместить только одну кнопку для удаления нескольких строк в GridView ....удалить несколько строк с помощью флажка в gridview ... я использую Entity Framework

Я использую этот код, но он не работает ...

EmployeeModel.EmployeeEntities obj=new EmployeeModel.EmployeeEntities(); 
foreach(GridViewRow row in grdVw.Rows) 
{ 
    if ((row.FindControl("chkBox1") as CheckBox).Checked) 
    { 
    string id=grdVw.DataKeys[row.RowIndex].Value.ToString(); 
    int a=int.Parse(id); 
    var result = from n in obj.Emps where n.Ecode == a select n; 

    obj.DeleteObject(result.First()); 
    } 
} 
obj.SaveChanges(); 

Вот код для объявления мой GridView:

<asp:GridView ID="grdVw" runat="server" AutoGenerateColumns="false" ToolTip="Employee Details" DataKeyNames="Ecode"> 
    <Columns> 
     <asp:TemplateField HeaderText="select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkBox1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField HeaderText="EmpCode" DataField="Ecode" /> 
     <asp:BoundField HeaderText="EmpName" DataField="Ename" /> 
     <asp:BoundField HeaderText="Address" DataField="Address" /> 
     <asp:BoundField HeaderText="City" DataField="city" /> 
     <asp:BoundField HeaderText="EmailId" DataField="Email" /> 
     <asp:BoundField HeaderText="DOB" DataField="DOB" /> 
     <asp:BoundField HeaderText="JoinDate" DataField="joinDate" /> 
     <asp:BoundField HeaderText="Salary" DataField="Salary" /> 
    </Columns> 
</asp:GridView> 
+0

Вы получаете сообщение об ошибке? –

+0

нет, я не получаю никакой ошибки ... – sanjeet

+0

Фактически это не входит, если условие всегда выходит из того, если .... – sanjeet

ответ

2

Вы должны указать, какая ячейка содержит этот флажок. Изменить код:

row.Cells[/*index of the cell*/].FindControl("chkBox1") 
+0

это первая колонка поэтому я использую [0], но он не работает. – sanjeet

+0

Не могли бы вы разместить PLS ASPX? Что-то еще не так. Мой абрикос был одним моментом, может быть, у нас больше. – Fals

+0

i m приклеивание выше plz прочитан .... есть – sanjeet

2

Вашего if ((row.FindControl("chkBox1") as CheckBox).Checked) условия не верно в первый раз, хотя, потому что вы столкнулись строка заголовка вашего GridView в первой итерации цикла через все строки в сетке, как это:

foreach(GridViewRow row in grdVw.Rows) 

Вы должны проверить тип строки, например:

EmployeeModel.EmployeeEntities obj=new EmployeeModel.EmployeeEntities(); 
foreach(GridViewRow row in grdVw.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     if ((row.FindControl("chkBox1") as CheckBox).Checked) 
     { 
      string id=grdVw.DataKeys[row.RowIndex].Value.ToString(); 
      int a=int.Parse(id); 
      var result = from n in obj.Emps where n.Ecode == a select n; 

      obj.DeleteObject(result.First()); 
     } 
    } 
} 
obj.SaveChanges(); 

Примечание: Пожалуйста, прочитайте MSDN documentation for GridViewRow.RowType Property для получения дополнительной информации о различных типах строк в GridView.

UPDATE:

Попробуйте привязки вашей GridView только на не-постбэков (читай: первый раз, когда страница загружается), как это:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     Blcommon obj = new Blcommon(); 
     grdVw.DataSource = obj.GetEmployee(); 
     grdVw.DataBind(); 
    } 
} 
+0

это тоже не работает такой же проблема не входит в если состояние ... – sanjeet

+0

Хорошо, тогда это должно означать, что ваши значения флажков теряются до того, как выполняется условие 'if', где происходит логика' grdVw.DataSource' и 'grdVw.DataBind' относительно кода, который вы опубликовали? –

+0

В случае загрузки страницы ... на той же странице ... – sanjeet

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