2012-10-05 17 views
0

我们正在使用的String.Format( “{0:(###)### - ####}” 在一个DetailsView显示格式的电话号码。电话号码的一个例子是:数据:字面的String.format

(516)123-4567

<asp:TemplateField HeaderText="Primary Phone:" SortExpression="PrimaryPhone"> 

    <EditItemTemplate> 
     <asp:TextBox ID="TextBoxPrimaryPhoneEdit" runat="server" Text='<%# Bind("PrimaryPhone") %>'></asp:TextBox> 
    </EditItemTemplate> 

    <InsertItemTemplate> 
     <asp:TextBox ID="TextBoxPrimaryPhoneInsert" runat="server" Text='<%# Bind("PrimaryPhone") %>'></asp:TextBox> 
    </InsertItemTemplate> 

    <ItemTemplate> 
     <asp:Literal ID="PrimaryPhoneLiteral" runat="server" 
      Text='<%# iif(Len(Eval("PrimaryPhone"))=10, 
      string.Format("{0:(###) ###-####}", Int64.Parse(Eval("PrimaryPhone").ToString())), 
      Eval("PrimaryPhone")) %>' /> 
    </ItemTemplate> 

    <ItemStyle ForeColor="Blue" /> 
</asp:TemplateField> 

它很好地格式化时的电话号码正好是10号,它允许用户编辑手机的问题,我们越来越是当用户删除的电话号码,并尝试点击更新按钮,数据不会保存,直至用户键入的东西到即使数据库表列允许空值文本框。

难道我在做我的编码错误?我们希望以这种方式进行设置,以防用户在点击更新按钮之前清除手机文本框。

回答

1

一个错误,我已经在过去取得,如果一个文本框为空,您需要设置相应的变量设置为null为好。

例如,我的代码看起来是这样的:

if (TextBox1.Text.Trim() != String.Empty) 
{ 
    myObj.TextContent = TextBox1.Text; 
} 

但在该控件是空的情况下,就需要相应的变量设置为null:

if (TextBox1.Text.Trim() != String.Empty) 
{ 
    myObj.TextContent = TextBox1.Text; 
} 
else 
{ 
    myObj.TextContent = null; 
} 

编辑:

说实话,我真的只有背后填充码的工作,所以不太熟悉ASPX侧(如模板字段的所有这一切)。但无论如何,假设你可以达到你想要控制的内容(我只是把它PhoneNumberTextBox),并假设你有一个名为UpdateButton按钮:

protected void UpdateButton_Click(object sender, EventArgs e) 
{ 
    //this event runs on click of the button 
    Customer theGuy = new Customer(); 

    if (PhoneNumberTextBox.Text.Trim() != String.Empty) 
    { 
     theGuy.PhoneNumber = PhoneNumberTextBox.Text; 
    } 
    else //the control is empty 
    { 
     theGuy.PhoneNumber = null; 
    } 

    CustomerManager.Save(theGuy); 
} 

public static class CustomerManager 
{ 
    public static void Save(Customer customer) 
    { 
     using (SqlConnection myconn = new SqlConnection(SQLHelper.SCOnline2ConnStr)) 
     { 
      SqlCommand sqlcmd = new SqlCommand("CustomerManagement.sprocSaveCustomer", myconn); 
      sqlcmd.CommandType = CommandType.StoredProcedure; 
      sqlcmd.Parameters.Add("@PhoneNumber", SqlDbType.NVarChar); 

      sqlcmd.Parameters["@PhoneNumber"].Value = 
       (customer.PhoneNumber == null) ? 
       (object)DBNull.Value : customer.PhoneNumber; 

      myconn.Open(); 
      sqlcmd.ExecuteNonQuery(); 
      myconn.Close(); 
     } 
    } 
} 
+0

感谢您的快速回复。我将如何访问vb.net代码隐藏文件中名为PrimaryPhone的详细信息视图字段,并且还可以告诉我要使用哪个事件以及如何实现代码(如您所示)?谢谢。 –

+0

@ Emad-ud-deen我编辑了我的答案,在我为了简洁而复制/粘贴并缩短的应用程序中包含了一些最终工作代码中的一个例子。这只是我做过的事情,我记得之前特意跑过这个问题(没有考虑将空白字段保存为空)。希望这将是一个有用的提示,如果没有,对不起:) – CptSupermrkt

+0

感谢您的答复和代码示例。 :-) –