更新asp.net GridView

时间:2018-08-06 12:30:05

标签: c# asp.net gridview datasource

我试图理解为什么在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及其数据源有关的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 个答案:

答案 0 :(得分:1)

好吧,我发现您必须将GridView设置为EditIndex,因此它似乎可以正常工作。 现在我想知道它是如何工作的..因为您可以将EditIndex设置为0,但是无论您尝试编辑哪一行都无所谓。

我认为当您设置EditIndex时,请将GridView的状态设置为“编辑”或类似的内容。

知道我还有一个问题。.我第一次按一下更新按钮,但是在回发后,如果我尝试单击并保存其他行,则会出现旧错误。

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

谢谢你