临时数据源

时间:2009-07-31 18:50:02

标签: c# asp.net sql-server asp.net-ajax

我有一个绑定到sql server数据源的gridview。我目前正在将所选项目移动到ListBox以显示所选记录。我想从AJAX Toolkit切换到ReOrderList,以便能够重新排序所选项目。不幸的是,ReorderList需要一个真正的数据源来绑定。创建用户可以使用的某种临时表的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

我不跟随。您可以指向现有SqlDataSource的ReOrderList has a DataSourceID property。或者你实际上没有SqlDataSource控件吗?

如果没有,您如何将数据绑定到GridView?如果您绑定到某种对象的colllection,那么您可以使用ObjectDataSource,只要它实现IList接口即可。如果您尝试绑定到DataTable,可能会读取ReorderList - bind to DataTable

答案 1 :(得分:0)

好的,您可以做的是在viewstate中保留临时列表数据源。这是一个粗略的例子:

<asp:ScriptManager ID="SM1" runat="server"></asp:ScriptManager>

<ajaxToolkit:ReorderList ID="RList" runat="server"
    DragHandleAlignment="Left" ItemInsertLocation="End"
    AllowReorder="true" ShowInsertItem="true" PostBackOnReorder="false">
    <ItemTemplate>
        <p><%# Eval("ID") %> = <%# Eval("Name") %></p>
       </ItemTemplate>
        </ajaxToolkit:ReorderList>

        <asp:Button ID="ButtonAdd" runat="server" OnClick="ButtonClick_AddItem" Text="Add New" />

然后在codebehind:

public partial class SortList : System.Web.UI.Page
{
    [Serializable]
    public class MyItem
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public MyItem(Guid id, string name)
        {
            Id = id;
            Name = name;
        }
    }

    protected List<MyItem> MyList
    {
        get
        {
            if (ViewState["myClass"] == null)
                ViewState["myClass"] = new List<MyItem>();
            return (List<MyItem>)ViewState["myClass"];
        }
    }

    protected void AddItem(Guid id, string name)
    {
        MyList.Add(new MyItem(id, name));
        RList.DataSource = MyList;
        RList.DataBind();
    }

    protected void ButtonClick_AddItem(object sender, EventArgs e)
    {
        AddItem(Guid.NewGuid(), DateTime.Now.Ticks.ToString());
    }
}

显然,您可以将MyItem类替换为您要存储的任何内容,并将该按钮替换为GridView选择项事件。但希望原则在那里?