更新asp.net GridView中的行时出错

Posted

技术标签:

【中文标题】更新asp.net GridView中的行时出错【英文标题】:Error updating row in asp.net GridView 【发布时间】:2019-01-13 09:59:36 【问题描述】:

我试图了解为什么在对 GridView 的行执行更新时出现以下错误。

“在更新或删除操作期间未找到键属性值。检查以确保指定为绑定表达式的键属性可用于数据源。”

我已经设置了 GridView 的 DataKeyNames 属性。 奇怪的是,我在 GridView 的同一个项目模板中有 2 个 LinkBut​​ton: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及其DataSource相关的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 ;

谢谢你

【问题讨论】:

【参考方案1】:

好的,我发现您必须将 EditIndex 设置为 GridView,所以它似乎可以工作。 现在我想知道它是如何工作的。因为你可以将 EditIndex 设置为 0,不管你试图编辑哪一行都可以。

我认为,当您设置 EditIndex 时,您将 GridView 的状态设置为“编辑”或类似的东西..

知道我还有一个问题……我第一次点击更新按钮时它可以工作,但是在回发之后,如果我尝试点击并保存不同的行,旧的错误就会回来。

有人知道它是如何工作的以及如何解决第二个问题吗?

谢谢

【讨论】:

以上是关于更新asp.net GridView中的行时出错的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET GridView 更新中获取 textarea 中的文本

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作

asp.net webforms ajax 更新gridview

在 Asp.Net c# 中更新 gridview

asp.net的GridView控件的onrowdeleting属性怎么出错显示为找不到可接受类型。。。呢

asp.net c# gridview的居中问题