Как отформатировать столбец с десятичным числом с max и min в DataGridView?
Я хочу отформатировать десятичные знаки, отображаемые и захваченные в DataGridView, у меня есть минимальное количество десятичных знаков и максимальное количество десятичных знаков. Например:
If caught, "120.0" display "120.00"
If caught "120.01" display "120.01"
If caught "120,123" display "120,123"
If caught "120.1234" display "120.1234"
If caught "120.12348" display "120.1235" (round)
в столбце DataGridView "txtcDecimal" есть свойство (из конструктора)
txtcDecimal.DefaultCellStyle.Format = "N2";
txtcDecimal.DefaultCellStyle.Format = "0.00##"; // IS ANSWER. I do not work for an event that interfered
маска "0.00##" работает как "П2" только 2 десятичных знаков который делает правильное округление до двух десятичных знаков, но просто не нравится, что мне нужно (как я показываю в пример)
Как я могу сделать это простым способом, не потребляя много ресурсов?
спасибо harlam357 & том Гарске
3 ответов
для форматирования от 2 до 4 знаков после запятой можно использовать строку пользовательского формата.
txtcDecimal.DefaultCellStyle.Format = "0.00##"
пойти немного дальше...
public partial class Form1
{
public Form1()
{
InitializeComponent();
var list = new List<Data>();
list.Add(new Data { Prop1 = 1, Prop2 = 1.2 });
list.Add(new Data { Prop1 = 2, Prop2 = 1.234567 });
dataGridView1.Columns.Add("Prop1", "Prop1");
dataGridView1.Columns["Prop1"].DataPropertyName = "Prop1";
dataGridView1.Columns.Add("Prop2", "Prop2");
dataGridView1.Columns["Prop2"].DataPropertyName = "Prop2";
dataGridView1.Columns["Prop2"].DefaultCellStyle.Format = "0.00##";
dataGridView1.DataSource = list;
}
class Data
{
public int Prop1 { get; set; }
public double Prop2 { get; set; }
}
}
для форматирования от 2 до 4 знаков после запятой можно использовать строку пользовательского формата. (Как предусмотрено Harlam357)
txtcDecimal.DefaultCellStyle.Format = "0.00##"
Я проверил это с помощью следующего простого консольного приложения:
double myDouble = 13.1;
double myDouble2 = 13.12345;
Console.WriteLine(myDouble.ToString("0.00##"));
Console.WriteLine(myDouble2.ToString("0.00##"));
Console.Read();
вывод:
13.10
13.1235
ответ Харлама явно правильный....
обновление: вот как я реализовал его в формах:
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("a");
dt.Rows.Add(123.4);
dt.Rows.Add(123.45);
dt.Rows.Add(123.456);
dt.Rows.Add(123.4567);
dt.Rows.Add(123.45678);
this.dataGridView1.DataSource = dt;
this.dataGridView1.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting);
}
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != this.dataGridView1.NewRowIndex)
{
double d = double.Parse(e.Value.ToString());
e.Value = d.ToString("0.00##");
}
}
выход:
создать пользовательский модуль форматирования.
public class MyFormatProvider : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
// Check whether this is an appropriate callback
if (!this.Equals(formatProvider))
return null;
//if argument/ value is null we return empty string
if (arg == null)
return null;
string resultString = arg.ToString();
//transform resultString any way you want (could do operations based on given format parameter)
//return the resultant string
return resultString;
}
}
источник: как настроить формат данных в datagridview во время привязки данных