在ASP.NET中使用gridview控件时,我遇到了一个奇怪的问题。我正在使用分页。asp.net gridview怪异行为
网格中的第二列是包含诸如“D”,“S”等的值的“订单状态”列。“D”和“S”是代表“已交付”和“已发货”。我们正在使用这些表示来节省数据库中的空间。
现在,在GridView中显示它时,我希望它显示为“Displayed”或“Shipped”,而不是显示为数据源一部分的“D”和“S”。第一次加载页面时,我通过获取当前页面的行并通过页面加载事件的帮助,使用“已发送”和“已发送”更改单元格的“D”和“S”来处理它。
但是,当我使用网格视图的分页控件转到下一页时,会出现问题。
“订单状态”列中的值未更新为第二页中的“D”和“S”,因此我的功能将无法将其提取并将其转换为“已交货”和“运送”。
我也尝试了OnPageIndexChanged
事件。不与:(
即使工作下面的代码。
GridView控件
<asp:GridView ID="OrderGrid" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataSourceID="OrderHistory" AlternatingRowStyle-CssClass="alt"
CssClass="order_grid" DataKeyNames="order_id" OnPageIndexChanging="OrderGrid_PageIndexChanging">
SET ORDER状态的方法
public void SetOrderStatus()
{
string Delivered = "Delivered";
string Shipped = "Shipped";
string Processing = "Processing";
for (int i = 0; i < OrderGrid.Rows.Count; i++)
{
if (OrderGrid.Rows[i].Cells[1].Text == "D")
{
OrderGrid.Rows[i].Cells[1].Text = Delivered;
OrderGrid.Rows[i].Cells[1].BackColor = System.Drawing.Color.FromName("#127b41");
OrderGrid.Rows[i].Cells[1].ForeColor = System.Drawing.Color.FromName("#fdfdfd");
}
if (OrderGrid.Rows[i].Cells[1].Text == "S")
{
OrderGrid.Rows[i].Cells[1].Text = Shipped;
}
if (OrderGrid.Rows[i].Cells[1].Text == "P")
{
OrderGrid.Rows[i].Cells[1].Text = Processing;
}
}
}
页面索引改变功能
protected void OrderGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
OrderGrid.PageIndex = e.NewPageIndex;
OrderGrid.DataBind();
SetOrderStatus();
string o = OrderGrid.Rows[0].Cells[1].Text;
}
我通常不会发布我的所有代码,但我迫不及待想要解决这个问题。我将不胜感激任何帮助。
在此先感谢!
为什么不更改数据源以返回预期的显示值?您的表示层不应该负责将状态代码翻译成显示文本。 – 2012-02-22 20:14:41