2016-01-22 1 views
1

Как можно добавлять, удалять и редактировать несколько строк «содержащие текстовые поля» в GridviewGridview Добавить/удалить строки

Без вставки в БД

Я попытался

Gridview1.rows.add(datarow) 

И для удаления

Gridview1.rows.remove(datarow) 

но без обнаружения выбранного ряда

+0

Как вы построить свой DataRow? можете ли вы показать больше кода? – lyz

+0

Вы можете привязываться к 'DataTable' без базы данных. Я бы не рекомендовал напрямую манипулировать строками сетки, просто манипулировать данными, к которым он привязан. – Crowcoder

ответ

1

Для этого вы можете использовать подход в коде ниже. В показанном методе addRow вставлена ​​новая строка сетки. Логика заключается в том, что нам нужно повторно привязать сетку к новому источнику данных, который содержит исходные строки плюс новую пустую строку. Вы можете использовать подобный подход для удаления (создайте новый источник данных с удаленными строками, а затем переустановите сетку).

При удалении используйте метод deleteRow. Я предположил, что у вас есть элемент флажка с идентификатором chkDelete в строке сетки, который при проверке означает, что строка должна быть удалена. Вы можете удалить несколько строк одновременно, используя метод deleteRow.

Если вы используете следующие два метода для добавления строки и удаления строк (строк), то автоматически ваши отредактированные текстовые поля будут иметь свои новые значения, всегда сохраненные, то есть editing would then be automatically taken care of.

Предположения сделаны: Кроме того, я предположил, что в ячейке сетки есть 3 текстовых поля, а также флажок. Поскольку существует 3 текстовых поля, поэтому DataTable, созданный в методах ниже, должен содержать 3 столбца для этих 3 текстовых полей, и эти столбцы должны быть строкового типа.

Добавить Роу

protected void addRow() 
{ 
    DataTable dt = new DataTable(); 
    //add code to create columns for this data table 
    //only create columns for textbox data 
    dt.Columns.Add("Column1", typeof(string)); 
    dt.Columns.Add("Column2", typeof(string)); 
    dt.Columns.Add("Column3", typeof(string)); 
    DataRow dr = null; 

    //build a data source of existing rows 
    foreach (GridViewRow gridRow in grid1.Rows) 
    { 
     dr = dt.NewRow(); 

     //set only text box values in new data source 
     //so checkbox column for row selection will be ignored 
     TextBox txtColumn1 = gridRow.FindControl("txtColumn1") as TextBox; 
     TextBox txtColumn2 = gridRow.FindControl("txtColumn2") as TextBox; 
     TextBox txtColumn3 = gridRow.FindControl("txtColumn3") as TextBox; 

     dr[0] = txtColumn1.Text; 
     dr[1] = txtColumn2.Text; 
     dr[2] = txtColumn3.Text; 

     dt.Rows.Add(dr); 
    } 

    //create the row in data sourec for the new grid row 
    dr = dt.NewRow(); 
    dt.Rows.Add(dr); 

    //bind the grid view, which will now show you the new added row in addition to original rows 
    grd.DataSource = dt; 
    grd.DataBind(); 
} 

Удалить строку (ы)

protected void deleteRow() 
{ 
    DataTable dt = new DataTable(); 
    //add code to create column for this data table 
    //only set column for textbox columns 
    dt.Columns.Add("Column1", typeof(string)); 
    dt.Columns.Add("Column2", typeof(string)); 
    dt.Columns.Add("Column3", typeof(string)); 

    //build a data source of existing rows 
    foreach (GridViewRow gridRow in grid1.Rows) 
    { 
     //get whether the checkbox for deleting row is checked or not 
     CheckBox chkDelete = gridRow.FindControl("chkDelete") as CheckBox; 
     //do not add original row if it was checked to be deleted 
     if(!chkDelete.Checked) 
     { 
      dr = dt.NewRow(); 

      //set only text box values in new data source 
      //so checkbox column for row selection will be ignored 
      TextBox txtColumn1 = gridRow.FindControl("txtColumn1") as TextBox; 
      TextBox txtColumn2 = gridRow.FindControl("txtColumn2") as TextBox; 
      TextBox txtColumn3 = gridRow.FindControl("txtColumn3") as TextBox; 

      dr[0] = txtColumn1.Text; 
      dr[1] = txtColumn2.Text; 
      dr[2] = txtColumn3.Text; 

      dt.Rows.Add(dr); 
     } 
    } 

    //bind the grid view, which will now NOT have the deleted rows 
    grd.DataSource = dt; 
    grd.DataBind(); 
}