1

私がやっていることは、あるグリッドから別のグリッドに行をコピーすることです。元のグリッドは編集できませんが、目的のグリッドは編集できます。

したがって、行をロードして変更すると、元のグリッド内の値も変更されます。

さらに、元のグリッドから目的のグリッドに行を 2 回追加すると、さらに問題が発生します。宛先グリッド内のいずれかの行で 1 つのデータを変更すると、元のグリッド内の「読み取り専用」バージョンだけでなく、宛先テーブルの他の行内のデータも変更されます。

これは、コピー元の親のdata-uidを保持しているすべてのコピーされた行が原因であると思われます。誰かがこれを確認/否定し、おそらく回避策を教えてくれたら、私は信じられないほど感謝しています!

補足: 実装要件のため、このコードはすべてクライアント側である必要があるため、コントローラー メソッドを使用してこの作業を行うことはできません。私はこの方法で動作させましたが、私が必要とすることには十分ではありません。

元のグリッド (コピー元):

@(Html.Kendo().Grid(Model)
.Name("ProductBookGrid")
.Columns(columns =>
{
    columns.Bound(i => i.FreightClass).Width(70);
    columns.Bound(i => i.Length).Width(70);
    columns.Bound(i => i.Width).Width(70);
    columns.Bound(i => i.Height).Width(70);
    columns.Bound(i => i.DimensionUOM).Width(70);
    columns.Bound(i => i.QuantityValue).Width(70);
    columns.Bound(i => i.QuantityUOM).Width(70);
    columns.Bound(i => i.WeightValue).Width(70);
    columns.Bound(i => i.WeightUOM).Width(70);
    columns.Bound(i => i.NMFC).Width(75);
    columns.Bound(i => i.Description).Width(150);
})
.ToolBar(toolbar =>
{
    toolbar.Custom().Text("Add").Url("#_").HtmlAttributes(new { onclick = "PopulateItemGrid()" });
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.Resizable(resize => resize.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
.DataSource(dataSource => dataSource
    .Ajax()
    .Model(model =>
    {
        model.Id(i => i.ItemModelID);
    })
)
.Selectable(selectable => selectable.Mode(GridSelectionMode.Multiple))

)

コピー機能:

    function PopulateItemGrid() {
var productBookGrid = $("#ProductBookGrid").data("kendoGrid");
var itemGrid = $("#QuoteItemGrid").data("kendoGrid");

productBookGrid.select().each(function () {
    var dataItem = productBookGrid.dataItem($(this));
    itemGrid.dataSource.add(dataItem); 
});

$("#ProductBookMenu").data("kendoMenu").close("#Item1");

}

宛先グリッド:

@(Html.Kendo().Grid(Model.ItemModelList)
.Name("QuoteItemGrid")
.Columns(columns =>
{
    columns.Bound(i => i.FreightClass)
        .EditorTemplateName("ItemGrid_RefFreightClassListing")
        .Width(50);
    columns.Bound(i => i.Length)
        .EditorTemplateName("ItemGrid_Length")
        .Width(30);
    columns.Bound(i => i.Width)
        .EditorTemplateName("ItemGrid_Width")
        .Width(30);
    columns.Bound(i => i.Height)
        .EditorTemplateName("ItemGrid_Height")
        .Width(30);
    columns.Bound(i => i.DimensionUOM)
        .EditorTemplateName("ItemGrid_RefUOMListingDimension")
        .Width(50);
    columns.Bound(i => i.QuantityValue)
        .EditorTemplateName("ItemGrid_QuantityValue")
        .Width(30);
    columns.Bound(i => i.QuantityUOM)
        .EditorTemplateName("ItemGrid_RefUnitTypeListing")
        .Width(50);
    columns.Bound(i => i.WeightValue)
        .EditorTemplateName("ItemGrid_WeightValue")
        .Width(30);
    columns.Bound(i => i.WeightUOM)
        .EditorTemplateName("ItemGrid_RefUOMListingWeight")
        .Width(50);
    columns.Bound(i => i.NMFC).Width(50);
    columns.Bound(i => i.Description).Width(100);
    columns.Bound(i => i.IsSaved).Width(20);
    columns.Command(command =>
    {
        command.Destroy();
    }).Width(60);
})
.ClientDetailTemplateId("ItemDetails")
.ToolBar(toolbar =>
{
    toolbar.Create();
    //toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Bottom))
.Pageable()
.Sortable()
.Scrollable()
.Resizable(resize => resize.Columns(true))
.DataSource(dataSource => dataSource
    .Ajax()
    .Batch(true)
    .ServerOperation(false)
    .Events(events =>
    {
        events.Error("QuoteItemGrid_ErrorHandler");
    })
    .Model(model =>
    {
        model.Id(i => i.ItemModelID);
        model.Field(i => i.DimensionUOM).DefaultValue("in");
        model.Field(i => i.WeightUOM).DefaultValue("lbs");
    })
    .Create(create => create.Action("CreateProducts", "ItemGrid"))
    .Read(read => read.Action("GetProducts", "ItemGrid"))
    .Update(update => update.Action("UpdateProducts", "ItemGrid"))
    .Destroy(destroy => destroy.Action("DeleteProducts", "ItemGrid"))
)

)

4

2 に答える 2

5

toJSONメソッドを使用して生データを取得できます。

var dataItem = productBookGrid.dataItem($(this));

itemGrid.dataSource.add(dataItem.toJSON()); 
于 2012-09-22T07:08:47.543 に答える
1
var userListGrid = $("#grid1").data("kendoGrid");
var selectedUserListGrid = $("#grid2").data("kendoGrid");

//Clear data.
$("#grid2").data('kendoGrid').dataSource.data([]);

for (var i = 0; i < userListGrid._data.length; i++) {

    var dataitem = userListGrid._data[i];
    //Some condition before add [IsChecked is a model property]
    if (dataitem.IsChecked == true) {
        selectedUserListGrid.dataSource.add(dataitem);
    }
}
于 2014-02-26T01:39:14.073 に答える