1

編集、削除、追加オプションを使用して編集可能なグリッドビューを表示しているasp.netアプリケーションがあります。このグリッドには通常のテンプレート フィールドがあります。静的文字列変数を持つ静的クラスもあります。これらの静的変数の値をテンプレート フィールドのヘッダー テキストとして保持したいと考えています。したがって、定数クラスの名前空間を次のようにインポートしました。

<%@ Import Namespace="ConstantManagerNamespace" %>

次に、同じ列を試しました:

1. <asp:TemplateField HeaderText=<%=ConstantManager.Name%>>

2. <asp:TemplateField HeaderText='<%=ConstantManager.Name%>'>

3. <asp:TemplateField HeaderText=<% ConstantManager.Name %>>

4. <asp:TemplateField HeaderText='<% ConstantManager.Name%>'>

  all probable syntax to access my constant variable value but

パーサー エラーが発生しました:

Literal content ('<asp:TemplateField HeaderText=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'.

これを行う方法 ?

4

2 に答える 2

0

この問題は、サーバー側のコントロール/値を別のサーバー側のコントロール内に埋め込もうとしているために発生します。データバインディングまたはカスタム式ビルダーを使用しない限り、これはasp.netでは直接不可能です。

正確な状況では、静的クラスから値を返すカスタム式ビルダーを作成する必要があります。

最終結果は次のようになります。

<asp:TemplateField HeaderText="<$ ConstantManager:Name >">

"ConstantManager"カスタム式ビルダーをプレフィックスで定義している限り、aspxファイルで絶対に許可されます。

カスタム式ビルダーを作成する実際の例は、ExpressionBuilderクラスにあります。

追加

また、データバインディングも機能すると思いますが、このような状況に対する正確な解決策ではないように思われます。

aspxマークアップで次の構文を使用するだけです。

<asp:TemplateField HeaderText="<# ConstantManager.Name >">

そして、ページの読み込み時に、次のように呼び出します。

protected void Page_Load(object sender, System.EventArgs e)
{
    this.DataBind();
}

個人的に私はこの解決策が好きではありませんPage_Load。とにかく、カスタム式と比較した場合、これは特別に宣言/コーディングする必要はありません。

これがお役に立てば幸いです。

于 2011-03-25T07:10:10.597 に答える
0

GridView RowDataBound イベントで静的クラス変数をバインドすることをお勧めします。

行タイプがヘッダーであることを確認してください。

 if (e.Row.RowType == DataControlRowType.Header)
    {
       e.Row.Cells[0].Text = ConstantManager.Name;                  
    }
于 2011-04-27T07:02:43.817 に答える