【问题标题】:Getting error while updating LINQDatasource更新 LINQDatasource 时出错
【发布时间】:2010-10-12 19:26:11
【问题描述】:

当我尝试更新绑定到网格视图的 LINQ 数据源时,我收到以下错误:

在 ViewState 中存储的原始值中找不到与给定键匹配的行。确保 'keys' 字典包含与上一个 Select 操作返回的行相对应的唯一键值。

我在网格视图中指定了DataKeyNames

这是 HTML:

<asp:GridView ID="TaskGridView" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="taskid,statusid,taskdescription" DataSourceID="GridDataSource" 
      onrowcreated="TaskGridView_RowCreated">
    <Columns>
        <asp:TemplateField HeaderText="taskid" InsertVisible="False" 
            SortExpression="taskid">
            <ItemTemplate>
                <asp:Label ID="TaskId" runat="server" Text='<%# Bind("taskid") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="taskdescription" 
            SortExpression="taskdescription">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("taskdescription") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="TaskDesc" runat="server" Text='<%# Bind("taskdescription") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="url" HeaderText="url" SortExpression="url" />
      <asp:TemplateField HeaderText="Status">
        <ItemTemplate>
            <asp:DropDownList runat="server" ID="ddStatus" DataSourceID="DropDownDataSource" DataValueField="statusid" SelectedValue="<%# Bind('Statusid') %>" DataTextField="statusdescription" ></asp:DropDownList>
        </ItemTemplate> 
      </asp:TemplateField>       
    </Columns>
</asp:GridView>
<asp:LinqDataSource ID="GridDataSource" runat="server" 
    ContextTypeName="DailyTask.DailyTaskDBDataContext" TableName="tbl_tasks" 
      EnableUpdate="True">
</asp:LinqDataSource>
<asp:Button ID="btnUpdate" runat="server" onclick="btnUpdate_Click" 
Text="Update" />
<asp:LinqDataSource ID="DropDownDataSource" runat="server" 
    ContextTypeName="DailyTask.DailyTaskDBDataContext" TableName="tbl_status">
</asp:LinqDataSource>

下面是对应的代码:

protected void btnUpdate_Click(object sender, EventArgs e)
{
    ListDictionary keyValues = new ListDictionary();
    ListDictionary newValues = new ListDictionary();
    ListDictionary oldValues = new ListDictionary();
    try
    {
        keyValues.Add("taskid", ((Label)TaskGridView.Rows[0].FindControl("TaskId")).Text);
        oldValues.Add("taskdescription", ((Label)TaskGridView.Rows[0].FindControl("TaskDesc")).Text);
        newValues.Add("taskdescription", "New Taskk");
        GridDataSource.Update(keyValues, newValues, oldValues);
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
}

【问题讨论】:

  • 如果您能显示与此问题相关的代码/xaml,将会有很大帮助。 kthx.

标签: linq linq-to-sql datasource


【解决方案1】:

我发现问题出在代码中

我只需要在这里使用 int.Parse() 因为 taskid 是主键

 keyValues.Add("taskid", int.Parse(((Label)TaskGridView.Rows[0].FindControl("TaskId")).Text));

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2011-04-07
    • 2017-05-29
    • 1970-01-01
    • 2016-08-27
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多