希望重新订购网页上的数据从顺序在一个数组
本文关键字:数组 一个 顺序 新订购 网页 数据 希望 | 更新日期: 2023-09-27 18:03:37
我有一个数据,名为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();
所以基本上(尝试)在这里发生的是,我们发现各种默认值(我们需要多少行等),并建立一些新的数据表传输,以及DRTransfer行,将用于来回传输的东西。
然后,对于每一行,我们将找出gvRoute中的哪一行应该在那里,将其放入DRTransfer中,然后将其添加到数据表dt中。
一旦完成,我们将尝试将datatable dt绑定回gvRoute列表。
目前我认为它几乎很好地管理了所有这些,除了实际上把它放回列表中。gvRoute数据表包含了各种各样的字段,现在它抱怨这些字段不存在。
EDIT -它抛出的错误是…
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'PKID_Operation'.
PKID_Operation是数据表中遇到的第一个字段。
编辑-列表的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") %>' />
<asp:Label ID="L1_NameLabel" runat="server" Text='<%# Eval("L1_Name") %>' />
-
<asp:Label ID="L2_NameLabel" runat="server" Text='<%# Eval("L2_Name") %>' />
-
<asp:Label ID="L3_NameLabel" runat="server" Text='<%# Eval("L3_Name") %>' />
<asp:Label ID="Operation_NameLabel" runat="server" Text='<%# Eval("Operation_Name") %>' />
-
<asp:Label ID="Team_NameLabel" runat="server" Text='<%# Eval("Team_Name") %>' />
(<asp:Label ID="PostcodeLabel" runat="server" Text='<%# Eval("Postcode") %>' />
)<asp:Label ID="EmptyLabel" runat="server" Text='<%# Eval("Empty") %>' Visible="False" />
(<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>
我认为问题是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();