UpdatePanel ne raffraichît pas correctement mon contrôle Repeater
Hello,
J'ai une page avec un UpdatePanel et un Repeater que je dois raffraichîr à chaques fois que les valeurs de ma ListBox sont sont sélectionnées.
le aspx est comme suit :
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
|
<div class="row ">
<div class="col-lg-3">
<label>Sélectionner la ou les langues nécessaire pour le baby-sitting:</label>
<asp:ListBox ID="lstBoxLanguages" runat="server" SelectionMode="Multiple" Height="100%" OnSelectedIndexChanged="lstBoxLanguages_SelectedIndexChanged" AutoPostBack="true" >
<asp:ListItem Value="0">Allemand</asp:ListItem>
<asp:ListItem Value="1">Anglais</asp:ListItem>
<asp:ListItem Value="2">Arabe</asp:ListItem>
<asp:ListItem Value="3">Espagnol</asp:ListItem>
<asp:ListItem Value="4">Français</asp:ListItem>
<asp:ListItem Value="5">Italien</asp:ListItem>
<asp:ListItem Value="6">Portugais</asp:ListItem>
<asp:ListItem Value="7">Serbe</asp:ListItem>
</asp:ListBox>
</div>
<div class="col-lg-1"></div>
<div class="col-lg-4 text-center">
</div>
<div class="col-lg-2"></div>
<div class="col-lg-2"></div>
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Action</th>
<th>Nom</th>
<th>Prénom</th>
</tr>
</thead>
<tbody>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="BabySitterUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Repeater ID="BabySitterRepeater" runat="server">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:HyperLink ID="ClientID" runat="server" NavigateUrl='<%#String.Format("AllClients.aspx?ID={0}&BabySitter={1}", IDClientSel, Eval("ID")) %>'>Envoyer</asp:HyperLink></td>
<td>
<asp:Label ID="lblLastName" runat="server" Text='<%# Eval ("LastName") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblFirstName" runat="server" Text='<%# Eval ("FirstName") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="lstBoxLanguages" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</tbody>
</table>
</div> |
Et le code behind :
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
protected void lstBoxLanguages_SelectedIndexChanged(object sender, EventArgs e)
{
List<int> selectedLanguages = new List<int>();
foreach (ListItem item in lstBoxLanguages.Items)
{
if (item.Selected)
{
selectedLanguages.Add(Convert.ToInt32(item.Value));
}
}
LoadBabySittersFiltered(selectedLanguages);
}
private void LoadBabySittersFiltered(List<int> IDLanguages)
{
System.Data.SqlClient.SqlConnection conn = null;
TakeCareBaby TCB = null;
try
{
TCB = new TakeCareBaby();
string select =
"SELECT " +
"FK_Tbl_Baby_Sitter_Id " +
"FROM Tbl_Langues_Tbl_Baby_Sitter " +
"WHERE ";
foreach (int id in IDLanguages)
{
if (id.Equals(IDLanguages.First()))
{
select = select + " FK_Tbl_Langues_Id = " + id;
}
else
{
select = select + " OR FK_Tbl_Langues_Id = " + id;
}
}
conn = new System.Data.SqlClient.SqlConnection(TCB.GetConnectionString());
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(select, conn);
conn.Open();
SqlDataReader myReader = cmd.ExecuteReader();
List<int> BabySitterWithSelectedLanguages = new List<int>();
while (myReader.Read())
{
BabySitterWithSelectedLanguages.Add (Convert.ToInt32(myReader[0]));
}
myReader.Close();
conn.Close();
select =
"SELECT " +
"Id, " +
"Nom, " +
"Prenom " +
"FROM Tbl_Baby_Sitter WHERE ";
if (!BabySitterWithSelectedLanguages.Count.Equals(0))
{
foreach (int id in BabySitterWithSelectedLanguages)
{
if (id.Equals(BabySitterWithSelectedLanguages.First()))
{
select = select + " Id = " + id;
}
else
{
select = select + " OR Id = " + id;
}
}
cmd = new System.Data.SqlClient.SqlCommand(select, conn);
conn.Open();
myReader = cmd.ExecuteReader();
BabySitters.Clear();
while (myReader.Read())
{
BabySitter MyReaderBabySitter = new BabySitter();
MyReaderBabySitter.ID = Convert.ToInt32(myReader[0]);
MyReaderBabySitter.LastName = Convert.ToString(myReader[1]);
MyReaderBabySitter.FirstName = Convert.ToString(myReader[2]);
BabySitters.Add(MyReaderBabySitter);
}
BabySitterRepeater.DataSource = BabySitters;
BabySitterRepeater.DataBind();
}
else
{
BabySitterRepeater.DataSource = null;
BabySitterRepeater.DataBind();
}
}
catch (System.InvalidOperationException invalOpeExc)
{
// TODO : add log here
throw;
}
catch (System.Data.SqlClient.SqlException sqlExc)
{
// TODO : add log here
throw;
}
catch (System.IO.IOException IOExc)
{
// TODO : add log here
throw;
}
catch (System.InvalidCastException invalCastExc)
{
// TODO : add log here
throw;
}
finally
{
if (conn.State.Equals(System.Data.ConnectionState.Open)) conn.Close();
}
} |
Le problème est que mon Repeater n'est pas du tout mis à jours comme je le voudrais, et les données qui me sont remontées de la base de données sont affichées mais en dehors du repeater entre ma ListBox et le tableau, pour je ne sais quelle raison 8O
Je suis sûr qu'il s'agit d'un truc bête mais ca fait plusieurs heures que je suis dessus et je ne trouve pas comment faire...
Merci pour votre aide :)
Leelith