Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Все статьи »

Обсудить на форуме Обсудить на форуме

C#: DataGrid + Checkbox(Delete/Insert) ASP.NET VS.NET
Написать эту статью меня побудило старательное игнорирование описание процедуры использования checkbox-ов в DataGrid в литературе (по крайней мере доступной мне), так и на форумах (в том числе англоязычных). Достаточно много задавалось вопросов, но вот ответы были разрозненными и не были в полной мере ясными для понимания и усвоения. Когда я сам несколько дней взялся за решение данной задачи (т. е. использование checkbox-ов в DataGrid ), в полной мере ощутил непроработанность данной проблематик
Написать эту статью меня побудило старательное игнорирование описание процедуры использования 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-ов (см. код страницы внизу)

<form id="Form1" method="post" runat="server">
<FONT face="MS UI Gothic">
<asp:DataGrid id=dgOrdertable style="Z-INDEX: 101; LEFT: 40px; 
		POSITION: absolute; TOP: 104px" runat="server" DataSource="<%# dataSet11 %>" DataMember="ordertable">
<Columns><asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="chkbox" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn></Columns>
</asp:DataGrid>
<asp:DataGrid id=dgOrdertable1 style="Z-INDEX: 102; LEFT: 432px; 
		POSITION: absolute; TOP: 104px" runat="server" DataSource="<%# dataSet11 %>" DataMember="ordertable1">
<Columns><asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="chkbox" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn></Columns>
</asp:DataGrid>
<asp:Button id="btnInsert" style="Z-INDEX: 103; LEFT: 208px; 
		POSITION: absolute; TOP: 64px" runat="server" Text="btnInsert" Width="64px"></asp:Button>
<asp:Button id="btnDelete" style="Z-INDEX: 106; LEFT: 480px; 
		POSITION: absolute; TOP: 64px" runat="server" Text="btnDelete"></asp:Button></FONT>
		</form>

Как видите из кода, таблица 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();
}
}

 

Теперь компилируем и… Вуаля… Работаем.

 

Вот и все. Весь приведенный здесь код полностью работающий.

Удачи всем.


Может пригодится:


Автор: Топоровский Александр
Прочитано: 12819
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру