0

TextBoxいくつかの条件に基づいて gridview` でa を無効にしています。

その後、 をトラバースしているgriviewときに、TextBox.Enabled プロパティを確認すると、true と表示されます。ただし、その行に対して false に設定しました。

このコードはrowdataboundイベント内にあります。問題に関連するコードを投稿しているだけです

TextBox txt_location = (TextBox)e.Row.Cells[htDGV_Map["Trailer's Last Location"]].FindControl("txt_location");

string remark_status = ""; string status = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "SHIP_TRAIL_STATUS"));

if (status.Equals("L")) remark_status = "REMARK_POSTMARCH"; else remark_status = "REMARK_REACH";

if (remark_status.Equals("REMARK_REACH")) { txt_location.ReadOnly = true; }

後で、このプロパティの値にアクセスしようとしています


TextBox txt_loc =
(TextBox)Gridrow.Cells[htDGV_Map["Tracking Trailers
Locations"]].FindControl("txt_location");

if(txt_loc.ReadOnly == true) { // other code } Here the property comes as false, although I am expecting it to be true.

ReadOnlyのプロパティを使用しようとしましたTextBoxが、ここでもReadOnlyプロパティが true であると予想していたときに false であることがわかりました。

4

1 に答える 1

0

RowDataBound イベントでコントロールのカスタム設定を適用するときに注意すべきことの 1 つは、ページが PostBack を実行する場合、GridView を再バインドしない限り、カスタム設定が失われることです。

考えられる回避策は、PostBack ごとに常に GridView を再バインドするか、代わりに PreRender イベントで Enabled / ReadOnly 設定を適用して DataRows を反復処理することですが、その後、SHIP_TRAIL_STATUS をどこかに (隠しフィールド) に保存する必要があります。 RowDataBound を使用して、PreRender でアクセスできるようにします。ViewState は、保存された値が PostBack の間も静的なままであることを保証します。

于 2013-04-07T07:33:34.027 に答える