无法按排序顺序保存ListBox项

时间:2012-01-19 22:07:38

标签: asp.net sorting webforms listbox

在我的.NET Web表单页面中,我有一个ListBox和一些允许我对项目进行排序的jQuery。我选择几个项目然后循环它们以保存到我的数据库。我想保存项目排序的顺序,但是,我无法让它工作。我的代码隐藏显示:

    protected void session_DetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {
        panel_SqlDataSource.Delete();
        ListBox panel_ListBox = session_DetailsView.FindControl("panel_ListBox") as ListBox;
        int so = 0;
        for (int i=0; i < panel_ListBox.Items.Count; i++)
        {
            if (panel_ListBox.Items[i].Selected == true)
            {
                so++;
                panel_SqlDataSource.InsertParameters["presenterID"].DefaultValue = panel_ListBox.Items[i].Value;
                panel_SqlDataSource.InsertParameters["sortOrder"].DefaultValue = so.ToString();
                panel_SqlDataSource.Insert();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

是的,所以你的订单在客户端被更改可能不会影响它在服务器上的顺序,因为它可能会在viewstate中的某处定义。您的控件将在最初显示时返回。你需要以某种方式跟踪事物的顺序 - 将其从形式变量或其他任何东西中拉出来。

答案 1 :(得分:0)

ASP .Net不知道ListBox中的项目已在客户端更改。您可能正在使用jQuery.sortable方法对列表框项进行排序。您需要使用“serialize”选项调用sortable并将值保存到隐藏字段中。当您发布表单时,您会读取该隐藏字段的值并将新订单保存在数据库中。

因此,对于带有id 1,2,3的对象具有新订单2,3,1的示例,然后创建如下所示的更新/插入方法:

update tbl set sortOrder = 1 where presenterId = 2
update tbl set sortOrder = 2 where presenterId = 3
update tbl set sortOrder = 3 where presenterId = 1