J'ai une DataTable qui comporte quatre colonnes, comme suit
MileStoneID MileStoneName Percentage SeqNbr
------------- --------------- ------------ ------
1 M-One 25 1
2 M-Two 30 2
3 M-Three 50 3
10 M-Four 20 4
Je lie cette table de données avec un GridView. Maintenant j'ai deux boutons d'image "imgbtnUp" et "imgbtnDown" qui montrent l'image de la flèche vers le haut et vers le bas.
Lorsque je sélectionne la deuxième ligne du GridView et que je clique sur le bouton "Up Image", la deuxième ligne doit devenir la première ligne et la première ligne doit devenir la deuxième ligne. De même, lorsque je sélectionne la deuxième rangée et que je clique sur le bouton "Down ImageButton", la deuxième rangée doit devenir la troisième rangée et la troisième rangée doit devenir la deuxième rangée. De même, je dois déplacer toutes les rangées vers le haut et vers le bas.
Comment y parvenir ? J'ai essayé le codage suivant pour l'événement de clic des boutons d'image haut et bas :
protected void imgbtnUp_Click(object sender, ImageClickEventArgs e)
{
if (gvMileStone.Rows.Count > 0)
{
int index = gvMileStone.SelectedIndex;
if (index == 0)
{
ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "window.alert('You cannot move the record up!')", true);
return;
}
else
{
DataTable dtUp = (DataTable)ViewState["Template"];//dtUp is the DataTable I mentioned above
int value = Convert.ToInt32(dtUp.Rows[index]["SeqNbr"].ToString());
dtUp.Rows[index]["SeqNbr"] = Convert.ToInt32(index + 1) - 1;
dtUp.Rows[index - 1]["SeqNbr"] = value;
dtUp.DefaultView.Sort = "SeqNbr";
dtUp.AcceptChanges();
gvMileStone.DataSource = dtUp;
gvMileStone.DataBind();
ViewState["Template"] = dtUp;
}
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "window.alert('There is no rows to move!')", true);
return;
}
}
protected void imgbtnDown_Click(object sender, ImageClickEventArgs e)
{
if (gvMileStone.Rows.Count > 0)
{
DataTable dtDown = (DataTable)ViewState["Template"];
int index = gvMileStone.SelectedIndex;
if (index + 1 == dtDown.Rows.Count)
{
ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "window.alert('You cannot move the record down!')", true);
return;
}
else
{
int value = Convert.ToInt32(dtDown.Rows[index]["MileStoneID"].ToString());
dtDown.Rows[index]["MileStoneID"] = Convert.ToInt32(dtDown.Rows[index]["MileStoneID"].ToString()) + 1;
dtDown.Rows[index + 1]["MileStoneID"] = value;
dtDown.AcceptChanges();
dtDown.DefaultView.Sort = "MileStoneID";
dtDown.AcceptChanges();
FillGrid(dtDown, gvMileStone);
ViewState["Template"] = dtDown;
}
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel), Guid.NewGuid().ToString(), "window.alert('There is no rows to move!')", true);
return;
}
}
et le code source de My GridView Column est le suivant :
<Columns>
<asp:TemplateField Visible="false">
<ItemTemplate>
<asp:Label ID="lblMileStoneID" runat="server" Text='<%# Bind("MileStoneID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="MileStoneName" HeaderText="MileStone Name" SortExpression="MileStoneName" ItemStyle-Width="130px" />
<asp:TemplateField HeaderText="Percentage">
<ItemTemplate>
<asp:TextBox ID="txtPercentage" runat="server" Text='<%# Bind("Percentage") %>' Width="50px" onkeypress="return DecimalValidate(event);"></asp:TextBox>
</ItemTemplate>
<ItemStyle Width="100px" />
<ControlStyle Width="100px" />
</asp:TemplateField>
<asp:TemplateField Visible="false">
<ItemTemplate>
<asp:Label ID="lblSeqNbr" runat="server" Text='<%# Bind("SeqNbr") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="false">
<ItemTemplate>
<asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="select" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
Au début, certaines rangées se déplacent correctement, mais après deux ou trois événements de clics, cela ne fonctionne plus. Comment déplacer la rangée entière vers le haut et vers le bas dans le GridView ? Veuillez m'aider.