我有一个具有以下属性(域)的域类用户:

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;
    }
}

09-28 02:43