我有一个绑定到sql server数据源的gridview。我目前正在将所选项目移动到ListBox以显示所选记录。我想从AJAX Toolkit切换到ReOrderList,以便能够重新排序所选项目。不幸的是,ReorderList需要一个真正的数据源来绑定。创建用户可以使用的某种临时表的最佳做法是什么?
答案 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选择项事件。但希望原则在那里?