我有一个ASP ListView,并且非常简单地要求将数字显示为带有逗号(12,123)的格式,而他们需要在没有格式化的情况下绑定到数据库(12123)。我正在使用标准设置 - 附带数据源的ListView,使用Bind()。
我从一些较旧的代码转换而来,所以我没有使用ASP.NET控件,只是表单输入......但我认为这不重要:
<asp:SqlDataSource ID="MySqlDataSource" runat="server"
ConnectionString='<%$ ConnectionStrings:ConnectionString1 %>'
SelectCommand="SELECT NUMSTR FROM MY_TABLE WHERE ID = @ID"
UpdateCommand= "UPDATE MY_TABLE SET NUMSTR = @NUMSTR WHERE ID = @ID">
</asp:SqlDataSource>
<asp:ListView ID="MyListView" runat="server" DataSourceID="MySqlDataSource">
<LayoutTemplate>
<div id="itemplaceholder" runat="server"></div>
</LayoutTemplate>
<ItemTemplate>
<input type="text" name="NUMSTR" ID="NUMSTR"
runat="server" value='<%#Bind("NUMSTR")%>' />
<asp:Button ID="UpdateButton" runat="server" Text="Update" Commandname="Update" />
</ItemTemplate>
</asp:ListView>
在上面的示例中,NUMSTR是一个数字,但存储为SqlServer 2008数据库中的字符串。我还使用ItemTemplate
作为读取和编辑模板,以保存重复的HTML。在示例中,我只获得未格式化的数字。如果我将字段转换为整数(通过SELECT
)并使用类似Bind("NUMSTR", "{0:###,###}")
的格式字符串,它会将格式化的数字写入数据库,然后在尝试再次读取时失败(可以用那里的逗号转换。
这有什么优雅/简单的解决方案吗?获得双向绑定很容易,我认为必须有一种方法可以轻松地格式化事物......
哦,我正在努力避免使用标准的ItemTemplate
和EditItemTemplate
方法,只是因为需要大量的标记。
谢谢!
答案 0 :(得分:1)
正如我在上面的评论中所看到的,我最终只是在ListView ItemUpdating事件中从NewValues集合中删除逗号,并在ItemDataBound事件中添加逗号。
如果有其他方法以干净的方式做到这一点,我很感兴趣!
VB.NET中的代码,注释语法与stackoverflow的突出显示兼容:
Protected Sub myListView_OnItemDataBound(ByVal sender As Object, ByVal e As ListViewItemEventArgs) Handles myListView.ItemDataBound
Dim intNumber As Integer
For Each c As Control In e.Item.Controls
If TypeOf c Is TextBox Then /*ASP textbox controls*/
Dim numberText As TextBox
numberText = DirectCast(c, TextBox)
If Integer.TryParse(numberText.Text, intNumber) Then /*If the text can be parsed, format it*/
numberText.Text = String.Format("{0:###,##0}", intNumber)
End If
Next
End Sub
Protected Sub myListView_OnItemUpdating(ByVal sender As Object, ByVal e As ListViewUpdateEventArgs) Handles myListView.ItemUpdating
Dim cleanNumber As String
Dim intNumber As Integer
For Each key As String In e.NewValues.Keys
cleanNumber = e.NewValues(key).ToString().Replace(",", Nothing) /*Remove all commas*/
If Integer.TryParse(cleanNumber, intNumber) Then /*If the text can be parsed, format it*/
e.NewValues(key) = intNumber.ToString()
End If
Next
End Sub
答案 1 :(得分:0)
您不能使用&lt;%#Bind(“表达式”[,“格式”])%&gt; 样式? 所以在你的情况下,设计一个格式字符串(我认为它应该是“#,### ”),ASP.NET将能够在输入和输出上格式化字符串。