1

DatatablesC#アプリケーションには2が必要です。最初のテーブルはデータベースから入力されます。2番目のテーブルは動的に作成する必要があるため、最初のテーブルの各行を3回複製し、異なる列名を持つ列のサブセットを表示します。

linqこれまでのところ、3つのクエリを作成し、結果を連結することでこれを達成しました。例えば

var query1 = from result in MainDataTable.AsEnumerable()
                         select new
                         {
                             MyRowID = result.Field<string>("MyRowID"),
                             Type = "ABC",
                             ScheduleDate = result.Field<DateTime>("Date1")
                         };

var query2 = from result in MainDataTable.AsEnumerable()
                         select new
                         {
                             MyRowID = result.Field<string>("MyRowID"),
                             Type = "DEF",
                             ScheduleDate = result.Field<DateTime>("Date2")
                         };

var query3 = from result in MainDataTable.AsEnumerable()
                         select new
                         {
                             MyRowID = result.Field<string>("MyRowID"),
                             Type = "GHI",
                             ScheduleDate = result.Field<DateTime>("Date3")
                         };

var queryFinal = query1.Concat(query2).Concat(query3);

次に、queryFinalをカレンダーコンポーネントのデータソースとして設定します。

ただし、上記のコードを再度実行するまで、の内容への変更はカレンダーコンポーネントMainDataTableのに存在しません。コピーする代わりにデータを参照しているため、自動的に更新さdatasourceれるオブジェクトまたはクエリを作成することは可能ですか?MainDataTable

4

2 に答える 2

1

したがって、現時点で私が考えることができる唯一の解決策はDataRow、をオブジェクトにラップすることです。このクラスを考えてみましょう:

public class ViewModel
{
    private DataRow _model;
    private string _dateField;

    public ViewModel(DataRow row, string dateField)
    {
        _model = row;
        _dateField = dateField;
    }

    public string MyRowID
    {
        get { return _model.Field<string>("MyRowID"); }
        set { _model["MyRowID"] = value; }
    }

    public string Type { get; set; }

    public DateTime ScheduleDate
    {
        get { return _model.Field<DateTime>(_dateField); }
        set { _model[_dateField] = value; }
    }
}

次に、LINQ ステートメントで、現在ViewModelの匿名型の代わりにa を作成します。

var query1 = from result in MainDataTable.AsEnumerable()
             select new ViewModel (result, "Date1");

これで、最終クエリのモデルは行のインスタンスを利用します。変更すると新しい値が取得されますが、変更すると行も更新されます。

于 2013-03-20T11:56:38.637 に答える
0

行を複製し、不要な列を削除し、既存の列の名前を変更することはできませんか?

        DataTable tbl2 = MainDataTable.Clone();

        tbl2.Merge(MainDataTable.Copy());
        tbl2.Merge(MainDataTable.Copy());
        tbl2.Merge(MainDataTable.Copy());

        tbl2.Columns.RemoveAt(0);
        tbl2.Columns.RemoveAt(1);

        tbl2.Columns[0].ColumnName = "SomeName";
        tbl2.Columns[1].ColumnName = "SomeName";
于 2013-03-20T12:02:21.507 に答える