ASP.NET-GridView-EditItem-整数的空值?

ASP.NET-GridView-EditItem-整数的空值?,asp.net,vb.net,Asp.net,Vb.net,我正在asp.net 2.0中使用GridView,我想执行内联编辑。我正在使用一个对象数据源。因为我想在gridview中的整数字段上使用验证控件,所以我将它们制作成,并添加了数据类型验证程序和范围验证程序。这允许我有一个空白字段,或一个介于0和999之间的整数值 我试图在未定义属性值时显示“-”。整数没有空值,所以我决定使用-1作为表示空值的值 如果值为-1,我将重新格式化以显示“-”。我的做法如下: <ItemTemplate> <asp:Label ID="lbl

我正在asp.net 2.0中使用GridView,我想执行内联编辑。我正在使用一个对象数据源。因为我想在gridview中的整数字段上使用验证控件,所以我将它们制作成
,并添加了数据类型验证程序和范围验证程序。这允许我有一个空白字段,或一个介于0和999之间的整数值

我试图在未定义属性值时显示“-”。整数没有空值,所以我决定使用-1作为表示空值的值

如果值为-1,我将重新格式化以显示“-”。我的做法如下:

<ItemTemplate>
   <asp:Label ID="lblPC" runat="server" Text='<%# FormatIntegerToText(Eval("PitchCount"),"-") %>'></asp:Label>
</ItemTemplate>
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
所有这些都非常有效。现在问题来了…当我单击编辑按钮时,会显示
(带有文本框等),但所有“null”值都显示为-1

我目前将此作为我的


…一对验证器。。。。
我想我可以执行以下操作来重新格式化文本框中的值:

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

但是当我这样做时,我得到一个编译错误,Bind不是一个可识别的函数


我的问题是,为什么这是不允许的,我如何才能解决它?

您可能希望以不同的方式来解决这个问题。创建模板列而不是使用绑定列。。。这将使您能够完全控制内容,并允许您编写一个函数来在显示期间格式化文本,以及在编辑时将内容设置为适当的值。

Bind实际上不是一个函数,这就是为什么会出现编译错误。详情请参阅

尝试用Eval替换Bind

您还需要在RowUpdate事件处理程序中存储新值:

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

另一种方法是使用。使用
可为空(指整数)
代替整数。然后,使用以显示“-”而不是NULL:

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

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