希望重新订购网页上的数据从顺序在一个数组

本文关键字:数组 一个 顺序 新订购 网页 数据 希望 | 更新日期: 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") %>' />
            &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>

希望重新订购网页上的数据从顺序在一个数组

我认为问题是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();