Wanneer ik mijn gebruikers werk met datasets in GridView
s, bestel ik altijd mijn gegevens op basis van de database-ID om ervoor te zorgen dat de positie van elk gegevensitem hetzelfde blijft. Zonder te weten hoe uw gegevensbron eruitziet, is het moeilijk te zeggen of u het opnieuw sorteren kunt voorkomen of wijzigen.
Echter, ( dit is pure speculatie omdat ik niet weet met wat voor soort gegevens je werkt ) als je je originele gegevensbron in de sessie hebt opgeslagen (I ' m ervan uitgaande dat je teruggaat naar de database en de gegevens na het verzenden pakt) en het heeft een soort van geordende ID, dan zou je iets kunnen doen als:
void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
List foodDataSource = Session["dataSource"];
ListItem editedFoodItem = foodListView.Items[e.ItemIndex];
MyFood newFood = new MyFood(
((HiddenField)editedFoodItem.FindControl("foodId")).Value,
((Label)editedFoodItem.FindControl("foodName")).Text
);
foodDataSource.Where(k => k.foodId == newFood.foodId).foodName = newFood.foodName;
//I'm guessing that you'll save somewhere in here,
//rather than do an update-once-style commit to the database when the user clicks a save button.
foodListView.DataSource = foodDataSource;
foodListView.DataBind();
}
Dit veronderstelt dat je je ItemTemplate
hebt gecodeerd met specifieke WebControls
/ HtmlControls
. Het is onhandig, en deze code moet opnieuw worden geformuleerd om vervelende code zoals de FindControl
-oproepen in een aparte functie in quarantaine te plaatsen, maar dit komt aardig in de buurt van wat ik doe wanneer mijn gebruikers gegevens bijwerken in een GridView
en sla hun wijzigingen vervolgens op in de database.
Alternatively, you could keep your current save methods the same, and just add something like:
void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
ListItem editedFoodItem = foodListView.Items[e.ItemIndex];
Label foodNameLabel = ((Label)editedFoodItem.FindControl("foodName"));
foodNameLabel.BackColor = System.Drawing.Color.LightGreen;
//Saving in here, somewhere.
//I'm not totally positive that DisplayIndex is the correct property here.
foodListView.Items.Where(k => k.DisplayIndex != e.ItemIndex).BackColor = System.Drawing.Color.White;
}
Ik weet niet zeker of uw gebruikers de gebruikersinterface zouden begrijpen, of dat het hen zou helpen als het zou vervagen (wat uw leven natuurlijk gecompliceerder zou maken), maar ik denk dat dit minder onhandig is dan de bovenstaande optie als zolang u de wijzigingen in de database na elke bewerking opslaat.