Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 编辑列表中的行后保持项目位置。。。我应该试一试吗?_Asp.net_Listview_User Interface - Fatal编程技术网

Asp.net 编辑列表中的行后保持项目位置。。。我应该试一试吗?

Asp.net 编辑列表中的行后保持项目位置。。。我应该试一试吗?,asp.net,listview,user-interface,Asp.net,Listview,User Interface,我正在手动将ASP.NET ListView绑定到按名称字母排序的对象数组。编辑项目后,再次设置数据源并调用DataBind。如果名称更改,您刚才编辑的项目可能已移动,甚至可能移动到另一页 比如,;您刚刚将热狗重命名为香肠,所以香肠在项目更新完成后移动 --- OLD LIST --- --- NEW LIST --- Hamburger Hamburger Hot Dog______ Pizza Pizza |_____Sa

我正在手动将ASP.NET ListView绑定到按名称字母排序的对象数组。编辑项目后,再次设置数据源并调用DataBind。如果名称更改,您刚才编辑的项目可能已移动,甚至可能移动到另一页

比如,;您刚刚将热狗重命名为香肠,所以香肠在项目更新完成后移动

--- OLD LIST ---   --- NEW LIST ---
    Hamburger          Hamburger
    Hot Dog______      Pizza
    Pizza        |_____Sausage
这是您希望从表单中看到的行为吗?编辑行时,是否希望在保存后看到该行?它应该处于完全相同的位置吗?是否应仅显示保存后刚刚编辑的记录?

对于保存后保持先前订单的技术方面,以及可能更改订单的技术方面

我知道为什么会这样。我正在寻找避免它的方法

我正在考虑将EditItemTemplate的控件组合到ItemTemplate中,并基于ListView EditIndex设置只读/可编辑控件的可见性


这似乎是可行的,但我想知道你们这些优秀的人是否还有其他想法。

您在这里看到的行为是典型的期望输出,因为一旦您进行了更改,信息就得到了正确的排序。如果你需要保持原有的结构,你很可能不得不走一条类似于你在文章中提到的路线


但是,我会花点时间看看这是否真的是您的用户想要的,经过大量编辑后,我可能会发现这变得非常混乱。

当我让用户在
GridView
s中处理数据集时,我总是按照数据库ID对数据进行排序,以确保每个数据项的位置保持不变。如果不知道数据源是什么样子,很难说是否可以避免或更改重新排序

但是,(这纯粹是猜测,因为我不知道您使用的是什么类型的数据,)如果您在会话中保存了原始数据源(我假设您将返回数据库并在提交后获取数据),并且它具有某种有序标识符,那么您可以执行以下操作:

void ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
    List<MyClass> 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();
}
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;
}

我不确定你的用户是否理解UI提示,或者如果它消失了(当然,这会使你的生活更加复杂),它是否会帮助他们,但我认为,只要在每次编辑后都将更改保存到数据库中,这个选项就没有上述选项那么笨重。

在某些情况下,我可以看到不需要重新使用列表,而是将项目保留在原来的位置。虽然美国程序员知道发生了什么,但普通用户可能会认为他们的项目被删除了

我已经创建了一个示例网站来演示这种行为。这实际上很容易实现,我相信您可以根据您的项目调整我的方法

在shell中,每次绑定网格时,我都会根据用户的选择(或默认排序)对数据列表进行排序,但在将其绑定到网格之前,我会检查是否应该保留顺序,在这种情况下,我从网格的DataKeyArray中提取最后一个序列号,并将这些序列号与它们各自的项相关联。在他们不想保留顺序的情况下,我只是将一个增量序列号关联到排序列表中的每个项目。然后我简单地按序列号排序


请看一下,我认为这会更有意义。

编辑数据列表的典型行为后是否重新排序?我试图回忆起我甚至需要编辑一行的任何web应用程序,这些行可能会从原始位置排序出来,但目前我没有这样做。是的,我使用过几种基于web的管理工具,它们都以这种方式运行。每次编辑后,列表都会重新排序。唯一的变化似乎是你是停留在列表中的位置,还是跟随记录到新的位置。当分页开始发挥作用时,这一点尤其重要。。。这取决于用户的要求。这里有一个完美的例子——我的网上银行预定付款按付款日期排序。我可以将第一项的日期更改为以后的日期,它可能会从列表中消失。这是一种预期行为,因为它是一种关于在给定时间段内将支付什么的视图。