2009-07-31 3 views
1

SQL Server 데이터 소스에 연결된 gridview가 있습니다. 현재 선택된 항목을 ListBox로 이동하여 선택한 레코드를 표시하고 있습니다. AJAX Toolkit의 ReOrderList로 전환하여 선택한 항목의 순서를 바꿀 수 있습니다. 불행히도 ReorderList는 바인딩 할 실제 데이터 소스가 필요합니다. 사용자가 사용할 일종의 임시 테이블을 만드는 가장 좋은 방법은 무엇입니까?임시 데이터 소스

답변

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" /> 

를 다음 코드 숨김에서 :

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()); 
    } 
} 

은 분명히 당신이 저장하고의 GridView 선택 항목 이벤트와 버튼을 대체 할 무엇 이건 MyItem 클래스를 대체 할 것입니다. 그러나 원칙적으로 거기에 있기를 바랍니다.

+0

감사합니다! 나는 viewstate에서 읽었는데 아직 다루지 않았지만 이것이 내가 원하는 것을해야하는 것처럼 보인다. – adamweeks

0

나는 따라 가지 않습니다. ReOrderList has a DataSourceID property은 기존 SqlDataSource를 가리킬 수 있습니다. 아니면 실제로 SqlDataSource 컨트롤을 가지고 있지 않습니까?

그렇지 않다면 데이터를 GridView에 어떻게 바인딩합니까? 어떤 종류의 객체 콜렉션에 바인딩하는 경우 IList 인터페이스를 구현하는 한 ObjectDataSource를 대신 사용할 수 있습니다. 대신 DataTable에 바인딩하려는 경우 ReorderList - bind to DataTable을 읽어야합니다.

+0

죄송합니다. 분명치 않았습니다. 이것은 여기에 대한 나의 첫 번째 게시물이며 .NET 환경으로 돌아갈 것입니다. ReorderList는 데이터 바인딩 된 gridview에서 현재 "선택한"항목을 표시하는 ListBoX를 대체합니다. GridView는 사라지지 않을 것이며 ListBox 만 잘하면됩니다. – adamweeks

+0

나는 이해하고 도움을주고 싶지만, 아직도 무엇을하려고하는지 잘 모르고있다. 사용자가 GridView에서 행을 선택할 수있게하고 해당 항목이 ReorderList에 나타나길 원한다는 말입니까? 그들이 끝내고 다시 명령을 내리고 나면 무엇을하고 싶니? –

+0

그래, 그게 내가 원하는거야. 일단 ReorderList로 끝내면 데이터를 웹 서비스 애플리케이션에 전달하여 계산을 수행 한 다음 해당 데이터를 다시 사용자에게 반환합니다. (그 부분은 이제 ListBox와 함께 작동합니다) – adamweeks