我在网页上找到了一个名为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。
一旦我们完成,我们将尝试将数据表dt绑定回gvRoute列表。
目前我认为除了实际将其重新列入清单之外,它几乎可以管理所有这些。 gvRoute数据列表包含各种字段,现在它们抱怨这些字段不存在。
编辑 - 它投掷的错误是......
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>
答案 0 :(得分: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();