2012-10-05 45 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

感謝您的答覆和代碼示例。 :-) –