2014-05-15 2 views
0

웹 페이지에 gvRoute라는 데이터리스트가 있습니다. 이것은 원래 알파벳 순으로 정렬되어 있습니다.배열의 웹 페이지에서 데이터리스트를 다시 정렬하려고합니다.

OurOrder 배열에 저장된 값을 기준으로이 데이터 목록을 다시 정렬하는 방법을 살펴 보겠습니다. 기본적으로 OurOrder [x]는 x 위치 (원래 12)는 원래 데이터 목록의 5 행이어야한다고 말합니다. 이 순서는 이미 코드의 다른 곳에서 다양한 계산을 수행하여 얻은 것입니다.

gvRoute 데이터 목록으로 다시 가져 오는 데 문제가 있습니다. 나는 현재 찾고 있어요 코드는 다음과 같습니다 :

int FromHere = 0; 
int TotalRows = gvRoute.Items.Count; 
DataTable dt = new DataTable(); 
DataTable dtcache = (DataTable)Session["MyTable"]; 
DataRow DRTransfer = dtcache.NewRow(); 
for (int x = 0; x < TotalRows - 1; x++) 
{ 
    FromHere = OurOrder[x]; 
    DRTransfer = dtcache.Rows[FromHere]; 
    dt.ImportRow(DRTransfer); 
} 
gvRoute.DataSourceID = ""; 
gvRoute.DataSource = dt; 
gvRoute.DataBind(); 

그래서 기본적으로 (노력)있어 여기에 일어나는 것은 우리가 다양한 기본값을 찾아 (우리는 등 필요한 행 수)와로 전송하는 새로운 datatables를 구축한다는 것입니다 뿐만 아니라 앞뒤로 물건을 전송하는 데 사용되는 DRTransfer 행이 있습니다.

그런 다음 각 행에 대해 gvRoute의 어느 행이 있어야하는지 DRTransfer에 넣은 다음 데이터 테이블 dt에 추가합니다.

일단 끝나면 datatable dt를 gvRoute 목록에 다시 바인딩하려고합니다.

현재 실제로 목록에 넣는 것 외에는 거의 모든 것을 관리하고 있다고 생각합니다. gvRoute 데이터리스트에는 다양한 필드가 포함되어 있으며, 현재이 필드가 존재하지 않는다고 불평하고 있습니다.

편집 - 그것은 던지고 오류가

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'PKID_Operation'. 

PKID_Operation이 DataList에에서 발생하는 필드의 첫 번째 ...입니다.

편집 -리스트의 ASP 코드

<asp:DataList ID="gvRoute" runat="server" DataKeyField="PKID_Operation" DataSourceID="DSRoute" GridLines="Both" RepeatColumns="1"> 
     <ItemTemplate> 
      <asp:Label ID="FKID_ContractLabel" runat="server" Text='<%# Eval("FKID_Contract") %>' Visible="False" /> 
      <asp:Label ID="PKID_OperationLabel" runat="server" Text='<%# Eval("PKID_Operation") %>' Visible="False" /> 
      <asp:CheckBox ID="chkSel" runat="server" /> 
      <asp:Label ID="OperationOrderLabel" runat="server" Text='<%# Eval("OperationOrder") %>' /> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <asp:Label ID="L1_NameLabel" runat="server" Text='<%# Eval("L1_Name") %>' /> 
      &nbsp;- 
      <asp:Label ID="L2_NameLabel" runat="server" Text='<%# Eval("L2_Name") %>' /> 
      &nbsp;- 
      <asp:Label ID="L3_NameLabel" runat="server" Text='<%# Eval("L3_Name") %>' /> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <asp:Label ID="Operation_NameLabel" runat="server" Text='<%# Eval("Operation_Name") %>' /> 
      &nbsp;- 
      <asp:Label ID="Team_NameLabel" runat="server" Text='<%# Eval("Team_Name") %>' /> 
      &nbsp;(<asp:Label ID="PostcodeLabel" runat="server" Text='<%# Eval("Postcode") %>' /> 
      )<asp:Label ID="EmptyLabel" runat="server" Text='<%# Eval("Empty") %>' Visible="False" /> 
      &nbsp;&nbsp;&nbsp;&nbsp; (<asp:Label ID="Latitude" runat="server" Text='<%# Eval("Latitude") %>' /> 
      ,<asp:Label ID="Longitude" runat="server" Text='<%# Eval("Longitude") %>' /> 
      )<asp:Label ID="GeoOrder" runat="server" Text='<%# Eval("GeoOrder") %>' Visible="False" /> 
      <br /> 
     </ItemTemplate> 
    </asp:DataList> 

답변

1

나는 문제가 dt가 열이 없다는 생각입니다 .... 행을 가져 오기 전에 열을 추가해야합니다. 아마도 이것을 달성하는 더 좋은 방법이 있습니다. 그러나 이것을 시도해 볼 수 있습니다 :

int FromHere = 0; 
int TotalRows = gvRoute.Items.Count; 
DataTable dt = new DataTable(); 
DataTable dtcache = (DataTable)Session["MyTable"]; 
DataRow DRTransfer; 

foreach (DataColumn column in dtcache.Columns) 
{ 
    dt.Columns.Add(column.ColumnName, column.DataType); 
} 

for (int x = 0; x < TotalRows; x++) 
{ 
    FromHere = OurOrder[x]; 
    DRTransfer = dtcache.Rows[FromHere]; 
    dt.ImportRow(DRTransfer); 
} 
gvRoute.DataSourceID = ""; 
gvRoute.DataSource = dt; 
gvRoute.DataBind(); 
+0

데이터 목록에는 레이블이 포함되어 있지만 열은 포함되지 않습니다. 코드를 업데이트했습니다. – user25730

+0

흠.하지만 여전히 바인딩하려는 데이터 테이블에 열이 필요합니다. 내 제안을 시도 했습니까? – ForkandBeard

+0

죄송합니다 - 훌륭하게 작동합니다. 나는 총을 조금씩 뛰어 넘고 있었지만, 라벨이 달린 데이터리스트뿐만 아니라 컬럼에서도 작동한다. 감사! – user25730