使用标准数据绑定如下:
<asp:TextBox TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth", "{0:yyyy-MM-dd}") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
是否可以调用后面的代码来动态获取格式化字符串?类似下面的东西(不起作用):
<asp:TextBox TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth", "{" + GetFormatStringFromCodeBehind() + "}") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您可以通过
后面的代码获取文本框所需的FormatStringASPX
<asp:TextBox ID="TextBox1" runat="server" Text='<%# GetFormatStringFromCodeBehind( Eval("columnName")) %>'></asp:TextBox>
aspx.cs
public string GetFormatStringFromCodeBehind(object obj)
{
return Convert.ToDateTime(obj).ToString("dd/MM/yyy");
}
你应该使用Eval而不是Bind
答案 1 :(得分:0)
在Bind()
表达式中,不可能有比普通字符串更复杂的东西。甚至有关于此的错误报告(几乎与您的问题相同) - Data Binding with "Bind" and Formatting Problem (ASP.Net)和官方回复:
Microsoft于2009年1月22日上午7:23发布
您所看到的行为是设计上的。 Bind表达式是一个 ASP.NET代码生成的非常专业的部分,它有一个 您可以采样格式参数必须是文字的限制 失败,因为格式字符串是一个函数。你可以阅读 更多关于Bind的详细信息: http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx
答案 2 :(得分:0)
我通常使用DataBinder.Eval来获取PreRender上TextBox的值并进行设置。您可以添加一个条件来检查您是否处于编辑模式。
请参阅以下示例代码:
在.aspx中:
<asp:TextBox OnPreRender="txtClientTwoDob_PreRender" TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
并在您的代码中:
protected void txtClientTwoDob_PreRender(object sender, EventArgs e)
{
TextBox txtClientTwoDob = (TextBox)sender;
//You can check also if you are in edit mode or not before performing this
txtClientTwoDob.Text = DataBinder.Eval(txtClientTwoDob, "Text", "{0:yyyy-MM-dd}");
}
我希望这会有所帮助。