| Написать эту статью меня побудило старательное игнорирование описание процедуры использования checkbox-ов в DataGrid в литературе (по крайней мере доступной мне), так и на форумах (в том числе англоязычных). Достаточно много задавалось вопросов, но вот ответы были разрозненными и не были в полной мере ясными для понимания и усвоения. Когда я сам несколько дней взялся за решение данной задачи (т. е. использование checkbox-ов в DataGrid ), в полной мере ощутил непроработанность данной проблематики. Если информация, помещенная в моей статье поможет кому-либо в нашем нелегком программистском труде, я буду очень рад. 
 
 Исходные данные: 
 Имеем две таблицы - ordertable и ordertable1 со столбцами (OrderID(int), login(nvchar), StockID(int), postedDate(nvchar), Quantity(int)). 
 
 Примечание: В скобках даны типы данных столбцов 
 
 Поставленная задача: отмеченные флажками несколько строк из таблицы ordertable, нажатием на кнопку btnInsert скопировать в таблицу ordertable1. 
 Далее отмечаем несколько строк в таблице dgOrdertable1, и нажатием на кнопку btnDelete удаляем их. 
 
 Помещаем на WebForm1 две кнопки и две таблицы, как показано на рис. 1 
 
 
  
 Рис. 1 
 
 
 В каждой таблице создаем колонку CheckBox-ов (см. код страницы внизу)  Как видите из кода, таблица dgOrdertable связана с ordertable, а dgOrdertable1 связана с ordertable1. На форму перенесен sqlDataAdapter1, который связан с ordertable, и перенесен sqlDataAdapter2 - связан с ordertable1. Сгенерирован dataSet11,к которому привязаны dgOrdertable и dgOrdertable1. 
 
 Код загрузки страницы:   private void Page_Load( object sender, System.EventArgs e)
		{
			 if (!IsPostBack)
			{
				
				sqlDataAdapter1.Fill(dataSet11);
				sqlDataAdapter2.Fill(dataSet11);
				dgOrdertable.DataBind();
				dgOrdertable1.DataBind();
			}
		}
Далее обработчик события копирования строки из dgOrdertable в dgOrdertable1   private void btnInsert_Click( object sender, System.EventArgs e)
{
 int OrderID;
 int StockID;
 string login;
 string postedDate;
 int Quantity;			
CheckBox chkbox = new CheckBox();
 for ( int i =0; i < dgOrdertable.Items.Count-1; i++) 
{
 foreach (DataGridItem dgi in dgOrdertable.Items) 
{
 if (((CheckBox) dgi.FindControl("chkbox")).Checked) 
{				
login=dgOrdertable.Items[i].Cells[2].Text;
postedDate=dgOrdertable.Items[i].Cells[4].Text;
OrderID=System.Convert.ToInt16(dgOrdertable.Items[i].Cells[1].Text);
StockID=System.Convert.ToInt16(dgOrdertable.Items[i].Cells[3].Text);
Quantity=System.Convert.ToInt16(dgOrdertable.Items[i].Cells[5].Text);
// в sqlDataAdapter1 в InsertCommand в параметре CommandText "INSERT INTO ordertable 
//(OrderID, login, StockID, postedDate, Quantity) VALUES (@OrderID, @login, @StockID, //@postedDate, @Quantity)"
sqlDataAdapter2.InsertCommand.Parameters["@OrderID"].Value=OrderID;
sqlDataAdapter2.InsertCommand.Parameters["@login"].Value=login;
sqlDataAdapter2.InsertCommand.Parameters["@StockID"].Value=StockID;
sqlDataAdapter2.InsertCommand.Parameters["@postedDate"].Value=postedDate;
sqlDataAdapter2.InsertCommand.Parameters["@Quantity"].Value=Quantity;
sqlConnection1.Open();	
sqlDataAdapter2.InsertCommand.ExecuteNonQuery();
sqlConnection1.Close();
}
i++;
}					
sqlDataAdapter1.Fill(dataSet11);
sqlDataAdapter2.Fill(dataSet11);
dgOrdertable.DataBind();
dgOrdertable1.DataBind();
}
}
Обработчик события удаления отмеченных строк из dgOrdertable1.   private void btnDelete_Click( object sender, System.EventArgs e)
{
 int OrderID;
 int StockID;
 string login;
CheckBox chkbox = new CheckBox();
 for ( int i =0; i < dgOrdertable1.Items.Count; i++) 
{
 foreach (DataGridItem dgi in dgOrdertable1.Items) 
{
 if (((CheckBox) dgi.FindControl("chkbox")).Checked) 
{	
OrderID=System.Convert.ToInt16(dgOrdertable1.Items[i].Cells[1].Text);
login=dgOrdertable1.Items[i].Cells[2].Text;
StockID=System.Convert.ToInt16(dgOrdertable1.Items[i].Cells[3].Text);
// в sqlDataAdapter1 в DeleteCommand в параметре CommandText "DELETE FROM ordertable1
//WHERE (OrderID = @OrderID) AND (login = @login) AND (StockID = @StockID)"
sqlDataAdapter2.DeleteCommand.Parameters["@OrderID"].Value=OrderID;
sqlDataAdapter2.DeleteCommand.Parameters["@login"].Value=login;
sqlDataAdapter2.DeleteCommand.Parameters["@StockID"].Value=StockID;
sqlConnection1.Open();	
sqlDataAdapter2.DeleteCommand.ExecuteNonQuery();
sqlConnection1.Close();
}
i++;
}					
sqlDataAdapter1.Fill(dataSet11);
sqlDataAdapter2.Fill(dataSet11);
dgOrdertable.DataBind();
dgOrdertable1.DataBind();
}
}
 Теперь компилируем и… Вуаля… Работаем. 
 
 Вот и все. Весь приведенный здесь код полностью работающий. 
 Удачи всем. |