簡體   English   中英

結合使用實體數據源和可編輯的網格面板

[英]Using entitydatasource with editable gridpanel

我是ext.net的新手。 我正在嘗試使用EntityDataSource制作一個可編輯的網格

這是代碼:

<asp:EntityDataSource ID="EntityDataSource1" runat="server"
            AutoGenerateOrderByClause="True" 
            ConnectionString="name=Sample1Entities" 
            DefaultContainerName="Sample1Entities" 
            EnableDelete="True" 
            EnableFlattening="False" 
            EnableInsert="True" 
            EnableUpdate="True" 
            EntitySetName="Customer" 
            EntityTypeFilter="Customer"
            OnUpdating="EntityDataSource1_OnUpdating"
        >
<ext:GridPanel 
            runat="server" 
            ID="GridPanel1" 
            Height="570" 
            Title="Customers" 
            Frame="true">
            <Store>
                <ext:Store ID="Store1" runat="server" DataSourceID="EntityDataSource1" AutoSync="true"
                    IDMode="Client">
                    <Model>
                        <ext:Model ID="Model1" runat="server">
                            <Fields>
                                <ext:ModelField  Name="CustomerId" Mapping="CustomerId"  />
                                <ext:ModelField Name="Name" />
                                <ext:ModelField Name="Surname" />
                            </Fields>
                        </ext:Model>
                    </Model>
                </ext:Store>
            </Store>
            <ColumnModel ID="ColumnModel1" runat="server">
                <Columns>
                    <ext:Column ID="Column1" runat="server" DataIndex="CustomerId" Text="CustomerId"  Width="150"  />
                    <ext:Column ID="Column2" runat="server" DataIndex="Name" Text="Name"  Width="150">
                        <Editor>
                            <ext:TextField runat="server" ></ext:TextField>
                        </Editor>
                    </ext:Column>
                    <ext:Column ID="Column3" runat="server" DataIndex="Surname" Text="Surname"  Width="150" />
                </Columns>
            </ColumnModel>    
            <SelectionModel>
                <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" /> 
            </SelectionModel>
            <Plugins>
                <ext:CellEditing ID="CellEditing1" runat="server" />
            </Plugins>
        </ext:GridPanel>

實體類沒有問題。 我從db自動生成並進行了測試。 當我編輯名稱列時,出現以下錯誤:

System.Exception: The key-value pairs that define an EntityKey cannot be null or empty.\r\n
Parameter name: record ---> System.ArgumentException: The key-value pairs that define an EntityKey cannot be null or empty.\r\n
Parameter name: record\r\n 
at System.Data.EntityKey.CheckValue(String argumentName, String keyFieldName, Object value, PrimitiveType expectedType)\r\n 
at System.Data.EntityKey.CheckKeyValues(EntitySet entitySet, IExtendedDataRecord record, String[]& keyNames, Object& singletonKeyValue, Object[]& compositeKeyValues)\r\n 
at System.Data.EntityKey..ctor(EntitySet entitySet, IExtendedDataRecord record)\r\n at System.Data.Objects.ObjectStateManager.FixupKey(EntityEntry entry)\r\n at System.Data.Objects.EntityEntry.AcceptChanges()\r\n at System.Data.Objects.ObjectContext.AcceptAllChanges()\r\n at System.Web.UI.WebControls.EntityDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues)\r\n at System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback)\r\n at Ext.Net.Store.MakeUpdates(IDataSource ds, JArray data) in C:\\Users\\Geoffrey McGill\\Documents\\Visual Studio 2010\\Projects\\Ext.NET\\v2\\Ext.Net\\Ext\\Data\\Store.cs:line 890\r\n at Ext.Net.Store.MakeChanges() in C:\\Users\\Geoffrey McGill\\Documents\\Visual Studio 2010\\Projects\\Ext.NET\\v2\\Ext.Net\\Ext\\Data\\Store.cs:line 829\r\n at Ext.Net.Store.DoSaving(String action, String jsonData, JToken parameters) in C:\\Users\\Geoffrey McGill\\Documents\\Visual Studio 2010\\Projects\\Ext.NET\\v2\\Ext.Net\\Ext\\Data\\Store.cs:line 793\r\n --- End of inner exception stack trace ---\r\n at Ext.Net.Store.DoSaving(String action, String jsonData, JToken parameters) in C:\\Users\\Geoffrey McGill\\Documents\\Visual Studio 2010\\Projects\\Ext.NET\\v2\\Ext.Net\\Ext\\Data\\Store.cs:line 806\r\n at Ext.Net.Store.RaiseAjaxPostBackEvent(String eventArgument) in C:\\Users\\Geoffrey McGill\\Documents\\Visual Studio 2010\\Projects\\Ext.NET\\v2\\Ext.Net\\Ext\\Data\\Store.cs:line 1131

當我編輯gridpanel的單元格存儲時,發送以下ajax請求;

submitDirectEventConfig:{"config":{"serviceParams":"[{\"CustomerId\":\"3         \",\"Name\":\"e\",\"Surname\":\"soyad1    \",\"id\":null}]"}}
RowSelectionModel1:[{"RecordID":null,"RowIndex":2}]
__EVENTTARGET:ResourceManager1
__EVENTARGUMENT:Store1|postback|updat

Ë

謝謝

下一步,發現標記的“ IdPropery”屬性並為其分配“ CompanyId”值

 <ext:Model ID="Model1" runat="server" IDPropery="CompanyId">

然后傳遞上一個異常。 現在,它給下面這個例外;

System.Exception: Error while setting property 'id': 'Object of type 'System.Int32' cannot be converted to type 'System.String'.'. ---> System.Web.UI.WebControls.EntityDataSourceValidationException: Error while setting property 'id': 'Object of type 'System.Int32' cannot be converted to type 'System.String'.'.\r\n 
at System.Web.UI.WebControls.EntityDataSourceUtil.SetAllPropertiesWithVerification(EntityDataSourceWrapper entityWrapper, Dictionary`2 changedProperties, Boolean overwrite)\r\n 
at System.Web.UI.WebControls.EntityDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues)\r\n 
at 
....

有什么方法可以在Model中使用字符串ID字段嗎?

最后,我修改了ext.net源代碼,錯誤消失了。 在store.cs中,更改了以下代碼

        if (id.IsNotEmpty())
        {
            string idStr = token.Value<string>(id);

            int idInt;

            if (int.TryParse(idStr, out idInt) && 1==0) // disable this logic
            {
                keys[id] = idInt;
            }
            else
            {
                keys[id] = idStr;
            }
        }

希望此解決方案對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM