0

私はそのような状況にあり、行でいくつかの操作を行っているtxtファイルを読んでおり、最後にすべてをグリッドビューに表示したいと考えています。私は3つの分離した列を持っています。1 つ目と 2 つ目では、通常の文字列値を表示しています。しかし、真ん中には、あるクラスから返されたオブジェクトがあり、グリッドビューに通常どおり表示したいと考えています。どうすれば達成できますか?私はこれまでにこのようなものを持っています。

while ((line = sr.ReadLine()) != null)
{
    string[] lines = line.Split(",".ToCharArray());
    object returnValue;

    MyColumns object = new MyColumns();
    object.Time = line[0];
    object.System_Description = line[1];
    object.User_Description = line[2];

    ///earlier in my code I have object of class called method
    returnValue = method.MyMethod(mc.System_Description);

    Class main = new Class();
    main.Data1= object.Time;
    main.ProblemData= returnValue;
    main.Data2= object.User_Description;
    list3.Add(main);
}

this.dataGridView3.DataSource = list3;

ProblemData の表示に問題があります。この列に gridview が表示されます "project_name.Class_Name" (この値が返されたクラスの名前)

編集: OK、returnValue が値を取得するこのクラスには 5 つのプロパティがあることにも言及する必要があります。たとえば、Categry、Name、Second_Name、Status、および Value です。この returnValue は、この 5 つのプロパティすべてを現在の値とともに保持します。

EDIT2: 誰かがこのすべてのフィールドを 1 つの列に表示する方法を知っているのでしょうか? 表示目的のみに参加するにはどうすればよいですか? 通常のリストを作成してこの returnValue を挿入すると、これらの 5 つの列が作成され、内部に値が挿入されます。たぶん、理解しやすくなるでしょう。

4

3 に答える 3

1

あなたの質問に対する私の最初のコメントをご覧ください。

にバインドする 2 番目の列内でネストされた GridView を使用する必要がありますreturnValue。これは、GridView がオブジェクト データソースを自動的にカスケードできないためです。内部バインディングは、メイン GridView の RowDataBound イベントで行う必要があります。これが機能するには、コードを再編成/リファクタリングする必要があります。

returnValueまたは、文字列表現がシナリオで機能する場合は、のプロパティを連結できます。

編集

OPはWinForms DataGridView(ASP.Netではない)について尋ねています:

WinForms DataGridView は、すぐに使用できるネストをサポートしていません。ただし、複雑なテンプレートの回避策がいくつかあります。あなたは簡単な解決策を探しています。あなたの当面のニーズを満たすことができるものを見つけました。

イベントにフックしCellFormattingます。

if (e.value is YOUR_OBJECT_TYPE) {
    e.Value = (e.Value as YOUR_OBJECT_TYPE).YOUR_PROPERTY_NAME; 
}

詳細については、これを参照してください:ネストされたプロパティへのバインド

代替オプション:

returnValueas stringのプロパティを連結する代替オプションも機能します。

main.ProblemData = "Cat: " + returnValue.Category + ", Name: " + returnValue.Name;
于 2013-07-31T08:59:36.623 に答える
0

データバインディングでクラス変数を使用しているため、クラス変数をプロパティのように定義する必要があります。このような..

public String Data1 {get;set;}

また、リスト内の何かを変更するたびにビューに通知するため、リストを ObservableCollection にします。

于 2013-07-31T06:42:37.580 に答える