标签: iformatprovider

在DataGridView中使用自定义格式化程序

所以,也许这是一个糟糕的设计; 我不知道.但是我说有一个DataTable包含int值的列; 这些值实际上是代表enum我在项目中的某种类型.

我想要做的是DataGridView绑定到这个表并让列显示的是名称enum而不是整数值"0"或"1"或其他什么.

我考虑的一个选择是做整个正常化的事情:添加在表DataSetenum它的名称,键入的enum值,并有我的第一台坚持一个参考表.

但这是一个enum特定的想法.我想知道,如果在一般情况下,我可以写我自己IFormatProvider,并ICustomFormatter实现*给定类型,并使用该格式来控制值的方式显示在一个给定的列DataGridView控(还是真的在任何控制,对于这个问题) .

*这就是我怀疑它会如何完成,如果我所要求的是可能的话.我根本没有完全使用这些接口.

datagridview string-formatting iformatprovider winforms

4
推荐指数
1
解决办法
2557
查看次数

C#创建自定义NumberFormatInfo,当货币值为$ 0.00时显示"Free"

我需要在我的ASP.NET MVC应用程序中显示货币,但当货币为0时,我希望它显示"Free"(当然是本地化的!)而不是0.00美元.

所以,当我有这样的事情......

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

priceFree.ToString("C");
priceNotFree.ToString("C");
Run Code Online (Sandbox Code Playgroud)

输出为"$ 0.00""$ 100.00"

我希望它是"免费""100.00美元"

我想我可以使用的ToString(字符串格式,的IFormatProvider formatProvider)方法来做到这一点,但我不知道如何去做.很明显我想重新使用尽可能多的NumberFormatInfo尽可能的和唯一覆盖它当输入为0.在这种情况下,我可以简单的返回一个包含我的"自由"的字符串的本地化资源.

那我该怎么做?

谢谢

.net c# currency tostring iformatprovider

4
推荐指数
1
解决办法
1967
查看次数

具有整数值的 IFormatProvider

我的对象中有一个整数值。我需要将其转换为整数值。所以我就这样做了。System.Convert.ToInt64(Object) 但FxCop说我需要提供IFormatProvider。字符串数据类型我对提供 IFormatProvider 没有任何问题。如何为整数值提供 IFormatProvider?

c# iformatprovider

4
推荐指数
1
解决办法
5898
查看次数

StringBuilder追加没有格式化的字节

DateTime todayDateTime = DateTime.Now;
StringBuilder todayDateTimeSB = new StringBuilder("0");
todayDateTimeSB.Append(todayDateTime.ToString("MMddyyyy"));
long todayDateTimeLongValue = Convert.ToInt64(todayDateTimeSB.ToString());
// convert to byte array packed decimal
byte[] packedDecValue = ToComp3UsingStrings(todayDateTimeLongValue); 
// append each byte to the string builder
foreach (byte b in packedDecValue)
{
    sb.Append(b); // bytes 56-60
}
sb.Append(' ', 37);
Run Code Online (Sandbox Code Playgroud)

上面的代码获取当前日期时间,将其格式化为long值并将其传递给将其转换为压缩十进制格式的方法.我知道上面的工作是因为当我逐步执行代码时,字节数组对于我期望的所有字节都具有正确的十六进制值.

但是上面是我遇到问题的代码,特别是我已经研究过,发现字符串生成器.Append(byte)实际上ToString()为该字节做了一个.当它将字节添加到字符串时,这会改变字节的值.问题是我如何告诉StringBuilder它按原样取出'byte'并将其存储在内存中而不格式化/改变值.我知道还有一个.AppendFormat()有几个重载使用它IFormatProvider来提供很多很多关于如何格式化的选项,但是我没有看到任何方法告诉它不格式化/改变/改变数据的值.

c# stringbuilder iformatprovider

3
推荐指数
1
解决办法
7914
查看次数

如何在DateTime.ParseExact中使用IFormatProvider

为什么要使用IFormatProviderDateTime.ParseExact,如果已经有一个格式参数?

DateTime.ParseExact(inputString, format, cultureInfo);
Run Code Online (Sandbox Code Playgroud)

c# datetime iformatprovider

3
推荐指数
1
解决办法
3315
查看次数

使用自定义DateTimeFormatInfo的DateTime.Parse会引发异常

为什么这段代码会抛出异常?

var dateTime = "2012-03-21_15.12";
var format = new DateTimeFormatInfo()
{
   FullDateTimePattern = "yyyy-MM-dd-HH_mm.ss"
};

// FormatException: String was not recognized as a valid DateTime.
var parse = DateTime.Parse(dateTime, format); 
Run Code Online (Sandbox Code Playgroud)

c# datetime parsing formatexception iformatprovider

2
推荐指数
1
解决办法
4033
查看次数

如何将formatProvider参数添加到NLog.LogEventInfo.Create方法?

我有以下NLog 2.0代码来记录异常:

Dim theEvent = NLog.LogEventInfo.Create(NLog.LogLevel.Error, loggerName, message, ex)
Run Code Online (Sandbox Code Playgroud)

升级到NLog 4.1后,我看到以下警告:

函数Create(logLevel As LogLevel,loggerName As String,message As String,exception As Exception)由于LogEventInfo'已过时:'使用Create(LogLevel logLevel,string loggerName,Exception exception,IFormatProvider formatProvider,string message)'

...它要求我添加IFormatProvider formatProvider作为参数.我应该在那里添加什么?

Dim theEvent = NLog.LogEventInfo.Create(NLog.LogLevel.Error, loggerName, ex, ???, message)
Run Code Online (Sandbox Code Playgroud)

nlog iformatprovider

2
推荐指数
1
解决办法
1572
查看次数