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

C# 更新asp.net GridView中的行时出错,c#,asp.net,gridview,datasource,C#,Asp.net,Gridview,Datasource,我试图理解为什么在对GridView的行执行更新时会出现以下错误 “更新或删除操作期间未找到任何键属性值。请检查以确保指定为绑定表达式的键属性对数据源可用。” 我已经设置了GridView的DataKeyNames属性。 奇怪的是,我在GridView的同一个项目模板中有2个LinkButton:1个用于更新,1个用于删除。。删除一个正在工作,更新一个没有 这是页面前端的一段代码 <asp:GridView runat="server" ID="gridView" DataSourceID

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

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

我已经设置了GridView的DataKeyNames属性。 奇怪的是,我在GridView的同一个项目模板中有2个LinkButton:1个用于更新,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的索引,所以它似乎可以工作。 现在我想知道它是如何工作的。。因为您可以将EditIndex设置为0,无论您试图编辑哪一行,它都可以正常工作

我认为当你设置EditIndex时,你会将GridView的状态设置为“Edit”或类似的东西

我知道我还有一个问题。。我第一次点击更新按钮时,它会工作,但在回发后,如果我尝试单击并保存另一行,旧的错误会再次出现

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

谢谢

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 };