 |
Publicité
|
Insertion du DataGrid et databind()
Avant toute chose nous allons mettre en place notre DataGrid. Pour cela, nous allons insérer dans la class partiel de notre page un objet «SqlDataSource» et notre chaîne de connexion à la base de données. Ici la base de données de test, est une base SQL Server Express 2005 avec une table «Tbl_Test».
private SqlDataSource MyDataSrc = new
SqlDataSource();
private string
MyStrCon = @"Data Source=localhost;Initial
Catalog=TestDev;Persist Security Info=True;User ID=USER;Password=PASSWORD;";
Nous ne devons pas oublier de mettre notre «using» pour la connexion à SQL Server.
using System.Data.SqlClient;
Ajoutons maintenant dans le «load» de notre page la requête pour la base de données attachée à notre «SqlDataSource».
this.MyDataSrc.ConnectionString = MyStrCon;
this.MyDataSrc.SelectCommand = @"select
*, CASE WHEN Valid_Test <> 0 THEN 'true' ELSE 'false' END as ValidTest
from Tbl_Test order by Nom_Test";
this.MyDataSrc.Select(new DataSourceSelectArguments());
Nous pouvons insérer le DataGrid dans notre page, en abonnant deux méthodes, une à l’événement «RowDeleting» et l’autre à l’événement «RowDataBound».
<asp:GridView ID="GrdVwCptGen"
runat="server"
AutoGenerateColumns="False"
EmptyDataText="Il
n'y a pas d'enregistrement !"
Width="500px"
CellPadding="4"
ForeColor="#333333"
GridLines="None"
OnRowDataBound="GereGenRw"
AllowPaging="True"
OnRowDeleting="DelRw"
ShowFooter="True">
<FooterStyle
BackColor="#507CD1"
Font-Bold="True"
ForeColor="White"
/>
<RowStyle
BackColor="#EFF3FB"
/>
<Columns>
<asp:BoundField DataField="ID_Test"
HeaderText="Identifiant"
SortExpression="ID_Test"
ReadOnly="True">
<ItemStyle
HorizontalAlign="Center"
/>
</asp:BoundField>
<asp:BoundField DataField="Nom_Test"
HeaderText="Nom"
SortExpression="Nom_Test">
<ItemStyle
HorizontalAlign="Center"
Width="250px"
/>
</asp:BoundField>
<asp:CheckBoxField DataField="ValidTest"
HeaderText="Validité">
<ItemStyle
HorizontalAlign="Center"
/>
</asp:CheckBoxField>
<asp:CommandField ButtonType="Image"
CancelImageUrl="~/images/delete.png"
DeleteImageUrl="~/images/delete.png"
EditImageUrl="~/images/maj.jpg"
ShowDeleteButton="True"
ShowEditButton="True"
UpdateImageUrl="~/images/check.png">
<ItemStyle
HorizontalAlign="Center"
/>
</asp:CommandField>
</Columns>
<PagerStyle
BackColor="#2461BF"
ForeColor="White"
HorizontalAlign="Center"
/>
<SelectedRowStyle
BackColor="#D1DDF1"
Font-Bold="True"
ForeColor="#333333"
/>
<HeaderStyle
BackColor="#507CD1"
Font-Bold="True"
ForeColor="White"
/>
<EditRowStyle
BackColor="#3399FF"
/>
<AlternatingRowStyle
BackColor="White"
/>
</asp:GridView>
Il faut maintenant lier le SqlDataSource au DataGrid dans le «load» de la page.
this.MyDtGrdVw.DataSource = this.MyDataSrc;
if
(!Page.IsPostBack)
{
this.MyDtGrdVw.DataBind();
}
Définition de «DelRw»
Cette méthode a pour but de supprimer notre enregistrement via une requête paramétrée.
protected void DelRw(object sender, GridViewDeleteEventArgs
e)
{
// Recherche de l'identifiant à supprimer
int MyID = int.Parse(this.MyDtGrdVw.Rows[e.RowIndex].Cells[0].Text);
// Suppression par une requête paramétré
using (SqlConnection
MyCon = new SqlConnection(MyStrCon))
{
// Ouverture de la connexion
MyCon.Open();
// Création de la commande
using (SqlCommand
MyCmd = new SqlCommand())
{
MyCmd.Connection = MyCon;
MyCmd.CommandText = @"delete from Tbl_Test
where ID_Test = @ID";
MyCmd.Parameters.Add("@ID", SqlDbType.Int).Value = MyID;
// Execution de la commande
MyCmd.ExecuteNonQuery();
}
// Fermeture de la connexion
if (MyCon.State == ConnectionState.Open)
{
MyCon.Close();
}
}
// Refresh du DataGrid
this.MyDtGrdVw.DataBind();
}
Création du message d’alerte
Au moment de la fin de la génération de la ligne de données, il faut affecter au contrôle de suppression un attribut «onclick» qui va nous permettre de générer un message et de poursuivre en cas de validation. Pour cela, nous créons une méthode «GereGenRw» abonné à l’événement «RowDataBound».
protected void
GereGenRw(object sender, GridViewRowEventArgs e)
{
// Détermine si la ligne est une ligne de données
if
(e.Row.RowType == DataControlRowType.DataRow)
{
// Récupération du bouton
ImageButton MyImgBtn = (ImageButton)((DataControlFieldCell)e.Row.Cells[e.Row.Cells.Count
- 1]).Controls[2];
// Vérification du nom du bouton
if (MyImgBtn.CommandName == "Delete")
{
// Création de la chaîne du message
string MessageAlert = @"Voulez-vous
vraiment supprimer cet enregistrement ?";
// Création du JavaScript
string CmdJs = string.Format(@"if (!confirm('{0}'))
return;__doPostBack('{1}','{2}')"
, MessageAlert
, this.MyDtGrdVw.UniqueID
, MyImgBtn.UniqueID);
// Affectation du OnClick
MyImgBtn.Attributes.Add("onclick",
CmdJs);
}
}
}
Voilà, le message de confirmation apparaîtra au moment du click sur l’image.
|