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

时间:2009-07-16 01:11:34

标签: asp.net vb.net

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

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

如果值为-1,我正在重新格式化以显示“ - ”。我这样做如下:

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

在后面的代码中,我已经定义了函数FormatIntegerToText,如下所示:

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

所有这一切都很有效。现在出现了问题...当我单击我的编辑按钮时,显示<EditItem>(带有文本框等),但所有“null”值显示为-1

我目前将此作为<EditItemTemplate>

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

我虽然可以执行以下操作来重新格式化文本框中的值:

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

但是当我这样做时,我得到一个编译错误,Bind不是一个公认的函数。

我的问题是,为什么不允许这样做,我该如何解决呢?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

绑定不是真正的函数,这就是编译错误的原因。更多详情请见Eilon Lipton's Blog

尝试用Eval替换Bind。

您还需要在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 />