Как я могу отформатировать числа или строки в DataRepeater? - PullRequest
4 голосов
/ 06 октября 2011

Технология: .NET, SQL Server 2008 R2, Winforms

Хорошо, я не могу этого понять.

Прежде всего, я использую DataTableдля хранения данных, поступающих из базы данных SQL Server 2008, и я привязываю их к DataRepeater.

Я пытался изменить привязку следующим образом:

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

который отлично работает с текстовыми полями и метками в других местах, но не с DataRepeater.(label1 является частью ItemTemplate, связанного с DataRepeater)

Поскольку привязка подобных данных не работает, я хочу просто взять свой 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

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 23 августа 2012

Извините за мой плохой английский. Это прекрасно работает для меня.

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

Измените этот код для других типов данных.

Использует событие TextChanged текстового поля в Datarepeater.

1 голос
/ 06 октября 2011

Я думаю, что ваша DataTable "история" преобразует значения обратно в double. Когда тип данных столбца double (что я подозреваю), он принимает строковое представление double и любезно преобразует его обратно.

Вы должны добавить вычисляемый столбец к вашему DataTable и заполнить его строковым представлением числового значения.

Кстати: вы забыли i++ в своем for заявлении.

0 голосов
/ 28 августа 2017

, если вы хотите автоматически преобразовать 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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...