我在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不是一个公认的函数。
我的问题是,为什么不允许这样做,我该如何解决呢?
答案 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 />