2009-07-16 10 views
0

私はasp.net 2.0でGridViewを使用しており、インライン編集を実行したいと思います。私はオブジェクトのデータソースを使用しています。グリッドビューの整数フィールドに検証コントロールを使用したいので、それらを<TemplateFields>にし、データ型バリデーターと範囲バリデーターを追加しました。これにより空白のフィールド、または0〜999の整数値を持つことができます。ASP.NET - GridView - EditItem - 整数のNull値?

プロパティの値が定義されていない場合は、 " - "を表示しようとしています。整数にはNullはありませんので、-1を値として使用してNullを示すことにしました。

値が-1の場合、 " - "を表示するように再フォーマットしています。このすべてが素晴らしい作品

Protected Function FormatIntegerToText(ByVal value As Object, ByVal nullvalue As String) As String 
     ' Make sure value is not null... if so, return "-" 
     If value = Null.NullInteger() Then 
      Return nullvalue 
     Else 
      Return value.ToString() 
     End If 
End Function 

:私の背後にあるコードで

<ItemTemplate> 
    <asp:Label ID="lblPC" runat="server" Text='<%# FormatIntegerToText(Eval("PitchCount"),"-") %>'></asp:Label> 
</ItemTemplate> 

は、次のようにFormatIntegerToText機能を定義している:私はとしては、以下のことを行います。さて問題は、私は私の[編集]ボタンをクリックしたときに、私は現在、私の<EditItemTemplate>

<EditItemTemplate> 
    <asp:textbox ID="txtPC" runat="server" Text='<%# Bind("PitchCount") %>' width="25" Columns="2"></asp:textbox> 
    ....a couple of validators.... 
</EditItemTemplate> 
としてこれを持って <EditItem>が(テキストボックスなどに)表示されますが、すべての「ヌル」値は以下のように-1

表示されます...来ます

I Iは、テキストボックス内に配置されている値再フォーマットするには、以下のことができないにもかかわらず:

<EditItemTemplate> 
    <asp:textbox ID="txtPC" runat="server" Text='<%# FormatIntegerToText(Bind("PitchCount")) %>' width="25" Columns="2"></asp:textbox> 

を私はこれを行うとき、私はバインドが認識機能ではありません、コンパイルエラーが発生します。

私の質問は、なぜ許可されていないのですか、どうすれば回避できますか?

答えて

0

これは別の方法で行いたい場合があります。バインドされた列を使用する代わりに、コンテンツを完全に制御できるテンプレート列を作成し、編集中にコンテンツを適切な値に設定するだけでなく、表示中にテキストをフォーマットする関数を記述できるようにします。

0

バインドは実際には関数ではないため、コンパイルエラーが発生します。詳細はEilon Lipton's Blogです。

[バインド]を[評価]に置き換えてください。

またRowUpdatingイベントハンドラに新しい値を格納する必要があります:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    e.NewValues["PitchCount"] = 
     ((TextBox)((GridView)sender).Rows[e.RowIndex].FindControl("txtPC")).Text; 
} 

別のアプローチは、nullable typeを使用することです。整数の代わりにNullable(Of Integer)を使用してください。次にNullDisplayText propertyを使用して、NULLではなく " - "を表示してください。

<asp:BoundField DataField="PitchCount" NullDisplayText="-" HeaderText="PitchCount" 
    SortExpression="PitchCount />