我有一个具有以下属性(域)的域类用户:
UserId (int)
UserName (nvarchar(25))
SecurePassword (varbinary(32))
Salt (varbinary(32))
您可能已经猜到了,SecurePassword和Salt存储一个长度为32的字节数组。
如果我设置我的
BindingSource.DataSource = context.Users.Local.ToBindingList();
然后我的
DataGridView.DataSource = BindingSource;
我会收到一条错误消息,告诉我处理GridView的DataError事件。
一旦使用空方法执行此操作,SecurePassword和Salt列将为每行显示[X]。
现在,我可以使用linq将其呈现为匿名类型,如下所示:
var data = from u in context.Users
select new
{
u.UserId,
u.UserName,
SecurePassword = BitConverter.ToString(u.SecurePassword),
Salt = BitConverter.ToString(u.Salt)
};
但我真的不想要匿名类型。
在WPF中,我可以编写一个继承自IValueConverter的Converter,但在WinForms中似乎不可用。
任何帮助将不胜感激和欢迎。
最佳答案
使用CellFormatting事件。就像是:
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// 2 - Salt, 3 - SecurePassword
if (e.ColumnIndex == 2 || e.ColumnIndex == 3)
{
if (e.Value != null)
{
byte[] array = (byte[])e.Value;
e.Value = BitConverter.ToString(array);
e.FormattingApplied = true;
}
else
e.FormattingApplied = false;
}
}