我试图更新一条名为“注意”的记录。在gridview内联LINQ中使用下面的代码。我的问题是当我运行它并尝试执行updNote_RowUpdating
时,我的项目崩溃说明var queryDetails
不包含任何元素。
检查oldValue
变量显示其内容如下:
" System.Collections.Specialized.OrderedDictionary+OrderedKeyValueCollection
"
数据库由几个分配了多个注释的客户组成,所有这些信息都存储在一个数据库中。
我的代码如下:
<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="×" 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>
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();
}
非常感谢任何帮助。
答案 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();