4

技術:.NET、SQL Server 2008 R2、Winforms

わかりました、私の人生のために、私はこれを理解することができません。

まず第一に、SQL Server 2008データベースからのデータを格納するためにDataTableを使用しており、それをDataRepeaterにバインドしています。

私はこのようにバインディングを変更しようとしました:

label1.DataBindings.Add("Text", history, "Value", true, DataSourceUpdateMode.Never, "", "N");

これは、他の場所のテキストボックスやラベルではうまく機能しますが、DataRepeaterでは機能しません。(label1は、DataRepeaterに関連付けられたItemTemplateの一部です)

このようなデータのバインドは機能しないため、DataTableを取得して、列を上記の形式にする必要があります。

そして、データのフォーマットを手動で変更します:(それはフロートです)

for (int i=0;i < history.Rows.Count;i++)
{
    history.Rows[i]["Value"] = String.Format("{0:N}", history.Rows[i]["Value"]);
}

どちらも機能しません。データリピーターはそれを元に戻すだけです。

これ欲しい:

12,123,123.00

そして私はこれを手に入れます:

12123123

何か案は?

4

3 に答える 3

2

私の悪い英語でごめんなさい。これは私にとってはうまくいきます。

private void textBox10_TextChanged(object sender, EventArgs e)
{
string f = String.Format("{0:#0.00}", Convert.ToDouble(((TextBox)sender).Text));
        ((TextBox)sender).Text = f;
}

例:

textBox10.Text= 48
result= 48.00

他のデータ型ごとにこのコードを変更します。

それはTextChangedto でテキストボックスのイベントを使用しDatarepeaterます。

于 2012-08-23T12:48:49.130 に答える
1

DataTable値を に戻すのはあなたの「履歴」だと思いますdouble。列のデータ型がdouble(私が疑う) の場合、a の文字列表現を受け入れ、double親切に変換して戻します。

計算列をに追加しDataTable、数値の文字列表現で埋める必要があります。

i++ところで:あなたはあなたのfor声明でaを忘れました。

于 2011-10-05T21:45:24.263 に答える
0

12123123 を 12,123,123 に自動的に変換する場合。このコードをテキストボックスの _TextChanged イベントに入れます:

int i = ((TextBox)sender).SelectionStart;
        if (((TextBox)sender).Text != "")
        {
            string f = String.Format("{0:N0}", Convert.ToDouble(((TextBox)sender).Text));
            ((TextBox)sender).Text = f;
            int len;
            len = ((TextBox)sender).Text.Replace(",", "").Length;
            if ((len %= 3) == 1)
            {
                i += 1;
            }
            ((TextBox)sender).SelectionStart = i;
        }
于 2017-08-27T22:07:47.507 に答える