ASP.NETでgridviewコントロールを使用すると、私は奇妙な問題に直面しています。私はそれでページングを使用しています。asp.net gridview奇妙な振る舞い
グリッドの2番目の列は、「D」、「S」などの値を含む「注文ステータス」列です。「D」および「S」は、「納入済み」および「出荷済み」を表すデータベース値です。 "これらの表現を使用して、データベース内の領域を節約しています。
これをGridViewに表示している間、データソースの一部として提供される「D」および「S」の代わりに、「表示済み」または「出荷済み」として表示したいと思います。最初にページを読み込むとき、私は現在のページの行を取得し、ページロードイベントの助けを借りて "Delivered"と "Shipped"のセルの "D"と "S"を変更することによってそれを処理しています。
ただし、グリッドビューのページングコントロールを使用して次のページに移動すると問題が発生します。
"Order Status"列の値が2番目のページの "D"と "S"に更新されないため、私の関数がそれらを取り上げることができず、 "Delivered" 「出荷されました」。
私も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 STATUS方法
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;
}
通常、私のコードはすべて掲載しませんが、私はこの問題を解決するために絶望的です。私は大いに助けていただければ幸いです。
ありがとうございます!
期待される表示値を返すようにデータソースを変更しないのはなぜですか?あなたのプレゼンテーション層は、ステータスコードを表示テキストに翻訳する責任を負うべきではありません。 –