0

string.Format("{0:(###) ###-####}" を使用して、フォーマットされた電話番号を DetailsView に表示します。電話番号の例は次のとおりです。

(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 桁の場合に適切にフォーマットされ、ユーザーが電話番号を編集できるようになります。問題は、ユーザーが電話番号を消去して [更新] ボタンをクリックしようとした場合です。データベース テーブルの列で null が許可されていても、ユーザーが TextBox に何かを入力するまで、データは保存されません。

コーディングを間違えましたか? ユーザーが [更新] ボタンをクリックする前に電話の TextBox をクリアした場合に備えて、このような方法で設定したいと考えています。

4

1 に答える 1

1

私が過去に犯した間違いの 1 つは、テキスト ボックスが null の場合、対応する変数も 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();
        }
    }
}
于 2012-10-05T01:45:01.900 に答える