使用LINQ更新gridview内联

时间:2014-11-01 14:20:55

标签: c# asp.net linq gridview

我试图更新一条名为“注意”的记录。在gridview内联LINQ中使用下面的代码。我的问题是当我运行它并尝试执行updNote_RowUpdating时,我的项目崩溃说明var queryDetails不包含任何元素。

检查oldValue变量显示其内容如下: " System.Collections.Specialized.OrderedDictionary+OrderedKeyValueCollection"

数据库由几个分配了多个注释的客户组成,所有这些信息都存储在一个数据库中。

我的代码如下:

ASP.NET:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:GridView  ID="GridView1" runat="server" class=" table table-bordered table-striped" OnRowEditing="updNoteEdit_RowEditing" OnRowUpdating="updNote_RowUpdating" EnableViewState="false" AutoGenerateColumns="false">
               <Columns>
                <asp:TemplateField> 
                        <ItemTemplate> 
                          <asp:LinkButton ID="btnDeleteRec" runat="server" CausesValidation="False"  CommandName="select" Text="&times;"  class="close" ForeColor="red" OnClick="btn_delete_Click"></asp:LinkButton>
                          <asp:Label ID="lblNote" runat="server" Text='<%# Eval("Note") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txt_Note" runat="server" Text='<%# Eval("Note") %>'></asp:TextBox>
                        </EditItemTemplate>                    
                     </asp:TemplateField>
                   <asp:CommandField ShowEditButton="True" />
               </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>

C#:

protected void updNote_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    tblBasic currentClient = new tblBasic();

    var oldValue = "" + e.OldValues.Values;
    var newValue = "" + e.NewValues.Values;

    var queryDetails = (from clients in entities.tblBasics
                            where clients.Note == oldValue
                            select new
                            {
                                clients.Note
                            }).First();

    foreach (var client in entities.tblBasics)
        {
            currentClient.Note = newValue;
        }
        entities.SaveChanges();

        GridView1.EditIndex = -1;
        DataBind();
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

执行此操作时:

var oldValue = "" + e.OldValues.Values;

你基本上是在ToString()集合上调用e.OldValues.Values,它总是返回集合的类名而不是其内容,并解释了为什么你会看到这个:

  

System.Collections.Specialized.OrderedDictionary + OrderedKeyValueCollection

您需要将e.OldValues.Values中的所有值连接到一个字符串(可能与string.Join()连接,假设您正在尝试搜索所有注释,或者您可以从e.OldValues.Values集合中选择一个要搜索的备注。


所以每个&#34;值&#34;在你的集合中只是一个字符串,你想选择第一个匹配的字符串。

尝试使用此LINQ选择所需的音符:

var matchingNote = e.OldValues.Values.Cast<string>().Where(n => n == "note").First();