ASP.NET - Paramètres GridView CodeBehind
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 :
Code:
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> |
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".
Voici le SqlDataSource utilisé pour la selection du "log" suivi du CodeBehind :
Code:
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> |
________________________________________________________________
Code:
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);
}
} |
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".")
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).