Bonjour à tous, dans mon application web, j'ai une GridView qui doit permettre à l'utilisateur d'ouvrir un fichier log en fonction de la ligne selectionnée.
Mon seul problème ici est de récupérer mon SqlDataSource2 dans mon CodeBehind (requête + paramètres).
Voici la partie .aspx du GridView1 :
Donc lorsque l'utilisateur clique sur "Voir détail", un fichier doit s'ouvrir avec les logs de l’événement en fonction du "Job" et son "Etape".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" onrowdatabound="GridView1_RowDataBound" CellPadding="3" onrowcommand="GridView1_RowCommand" Width="100%"> <Columns> <asp:TemplateField HeaderText="Libellé Job" SortExpression="LIB_JOB"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("LIB_JOB") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("LIB_JOB") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ID_ETAPE" HeaderText="ID Etape" ReadOnly="True" SortExpression="ID_ETAPE" /> <asp:TemplateField HeaderText="Libellé Etape" SortExpression="LIB_ETAPE"> <EditItemTemplate> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("LIB_ETAPE") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Bind("LIB_ETAPE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="SERVEUR" HeaderText="Serveur" ReadOnly="True" SortExpression="SERVEUR" /> <asp:BoundField DataField="UTILISATEUR" HeaderText="Utilisateur" ReadOnly="True" SortExpression="UTILISATEUR" /> <asp:BoundField DataField="DATE_DEBUT" HeaderText="Date Début" ReadOnly="True" SortExpression="DATE_DEBUT" /> <asp:BoundField DataField="HEURE_DEBUT" HeaderText="Heure Début" ReadOnly="True" SortExpression="HEURE_DEBUT" /> <asp:BoundField DataField="Result" HeaderText="Resultat" SortExpression="Result" ReadOnly="True" /> <asp:BoundField DataField="DUREE(S)" HeaderText="Durée" SortExpression="DUREE(S)" /> <asp:TemplateField HeaderText="Voir" SortExpression="view"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("LIB_JOB") %>'></asp:TextBox> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("LIB_ETAPE") %>'></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:LinkButton ID="viewJob" runat="server" CommandName="view" CommandArgument='<%# Bind("LIB_JOB") %>;<%# Bind("LIB_ETAPE") %>'><b>Voir détail</b></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Voici le SqlDataSource utilisé pour la selection du "log" suivi du CodeBehind :
________________________________________________________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:DWHConnectionString8 %>" SelectCommand="SELECT [log] FROM [LOGS_JOBS_J_J-1] WHERE (LIB_JOB = @cat) AND (ID_ETAPE = @etape)" > <SelectParameters> <asp:QueryStringParameter Name="LIB_JOB" QueryStringField="cat" Type="String" /> <asp:QueryStringParameter Name="ID_ETAPE" QueryStringField="etape" Type="String" /> </SelectParameters> </asp:SqlDataSource>
J'ai essayé ça, mais après compilation j'ai une erreur comme quoi mes paramètres ne sont pas déclarés. ("Must declare the scalar variable "@cat".")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public partial class HistoriqueJobRaymark : System.Web.UI.Page { public static SqlConnection cnn = null; protected void Page_Load(object sender, EventArgs e) { cnn = new SqlConnection(); try { string chaineConnect = "Data Source=bdraymarkprod1;Initial Catalog=msdb;User ID=###;Password=###"; cnn.ConnectionString = chaineConnect; cnn.Open(); } catch (SqlException ex) { } } void FichierTexte(string nomFichier, string contenu) { StreamReader sr = null; StreamWriter sw = null; string line; try { sw = new StreamWriter(nomFichier); sw.WriteLine(contenu); sw.Close(); sw = null; // Ouverture du fichier et écriture du contenu du fichier sr = new StreamReader(nomFichier); line = sr.ReadLine(); while (line != null) { Debug.WriteLine(line); line = sr.ReadLine(); } Process.Start(nomFichier); } finally { // Fermeture streamreader if (sr != null) sr.Close(); // Fermeture streamwriter if (sw != null) sw.Close(); } } protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { string contenu = null; SqlCommand select = cnn.CreateCommand(); SqlDataReader lire_select; select.CommandText = SqlDataSource2.SelectCommand; lire_select = select.ExecuteReader(); select.Parameters.Add(new SqlParameter("@cat", GridView1.Rows[1])); select.Parameters.Add(new SqlParameter("@etape", GridView1.Rows[2])); //Condition qui vérifie si la requête retourne quelque chose (ligne/valeur) if (lire_select.HasRows) { lire_select.Read(); contenu = lire_select.GetValue(0).ToString(); lire_select.Close(); } FichierTexte("log.txt", contenu); } }
Est-il possible de tout récupérer du SqlDataSource (requête et paramètres)?
Merci d'avance aux personnes qui se pencheront sur mon problème
EDIT : J'ai changé le titre du post puisque finalement je fais tout à la main (en CodeBehind).
Partager