0

CoolStorage(ORM)CSListクラスをデータソースとして使用してDataGridViewにデータを入力しています。連絡先を表示しており、基になるContactTypeNameを表示する代わりに、すべてのレコードの「ContactType」を表示するのはContactType列です。

データがバインドされているため、行をステップスルーしてそのセルの値を変更することはできませんが、DataSourceにカーソルを合わせると、ContactTypeNameがContactTypeのプロパティとして使用可能であることがわかります。

結果セットからDataTableを手動で作成しなくても、ContactTypeセルに表示される値を変更する方法はありますか(ComboBoxのDisplayMemberと同等のものを考えています)?

どうもありがとう。

4

2 に答える 2

3

列を手動で設定せずにそれを行うために私が知っている唯一の方法は、クラス のToString()関数をオーバーライドすることです。ContactType

ただし、編集する場合は、列を手動で設定する必要があります。

私が取り組んだ他のほぼすべてのグリッドUIは、何らかの理由で列を手動で設定する必要がありました。

もう1つの方法は、ContactNameを関連オブジェクトとしてではなくプロパティとして公開するラッパークラス(基本的にはViewModel)にバインドすることです。そのモデルで双方向バインディングを行うこともできます。

于 2012-12-18T22:12:52.527 に答える
1

CSListGeneric代わりに使用することを検討しましたCSListか?

次に、を使用して、 :System.Linqに表示するものを選択できます。DataGridView

class Program
{
    class ContactType
    {
        public string Name { get; set; }
    }
    class Contact
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ContactType ContactType { get; set; }
    }
    static void Main(string[] args)
    {
        CSList<Contact> contacts = new CSList<Contact>();
        //add contacts to the list
        var x = from c in contacts
                select new {
                    c.Id,
                    c.Name
                    ContactTypeName=c.ContactType.Name
                };
    }
}
于 2012-12-18T22:22:29.650 に答える