我试图理解为什么在GridView的行上执行更新时出现以下错误。
“在更新或删除操作期间未找到键属性值。请检查以确保指定为绑定表达式的键属性可用于数据源。”
我已经设置了GridView的DataKeyNames属性。 奇怪的是我在GridView的同一项目模板中有2个LinkButton:1个用于更新,一个用于删除..删除一个正在工作,更新一个没有。
这是页面前端的代码片段
<asp:GridView runat="server" ID="gridView" DataSourceID="listDataSource" AllowPaging="false" AllowSorting="false"
AutoGenerateColumns="false" AutoGenerateDeleteButton="false" AutoGenerateEditButton="false" AutoGenerateSelectButton="false" OnRowCommand="gridView_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div class="valoriFields">
<asp:DynamicEntity runat="server" Mode="Insert" />
</div>
<div class="buttonsFields buttonsFieldsEnabled">
<asp:LinkButton runat="server" ID="btnSalva" ClientIDMode="Static" CommandName="Update" CssClass="btnSaveMulti" CausesValidation="true">
<span class="icon-save"></span>
</asp:LinkButton>
<asp:LinkButton runat="server" ID="btnDelete" ClientIDMode="Static" CommandName="Delete" CssClass="btnDeleteMulti" CausesValidation="false">
<span class="icon-delete"></span>
</asp:LinkButton>
</div>
<div style="clear:both;"></div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<ef:EntityDataSource ID="listDataSource" runat="server" EnableInsert="false" EnableDelete="true" EnableUpdate="true" OnUpdating="listDataSource_Updating" />
以下是与GridView及其数据源有关的CodeBehind
listDataSource.WhereParameters.Clear();
listDataSource.EntityTypeFilter = entityType.Name;
listDataSource.ContextType = contextType;
listDataSource.EntitySetName = entityType.Name;
listDataSource.AutoGenerateWhereClause = true;
listDataSource.WhereParameters.Add(parentIdName, DbType.Int32, parentID.ToString());
gridView.SetMetaTable(table, table.GetColumnValuesFromRoute(Context));
gridView.DataKeyNames = new string[] { IdName };
谢谢
答案 0 :(得分:1)
好吧,我发现您必须将GridView设置为EditIndex,因此它似乎可以正常工作。 现在我想知道它是如何工作的..因为您可以将EditIndex设置为0,但是无论您尝试编辑哪一行都无所谓。
我认为当您设置EditIndex时,请将GridView的状态设置为“编辑”或类似的内容。
知道我还有一个问题。.我第一次按一下更新按钮,但是在回发后,如果我尝试单击并保存其他行,则会出现旧错误。
任何人都知道它是如何工作的以及如何解决第二个问题吗?
谢谢你