我有一个带有删除,插入方法的Payment类。
public class Payment
{
public int Id { get; set; }
public int UserId { get; set; }
public string Fullname { get; set; }
public DateTime Date { get; set; }
public double Sum { get; set; }
public string PaymentType { get; set; }
public string RecordInfo { get; set; }
}
选择
public List<Payment> GetPayments(string sortExpression, string sortDirection)
插入
public void InsertPayment(int userId, DateTime date, string fullname, string paymentType, string recordInfo, double sum)
更新
public void DeletePayment(int id)
我在调用这些方法时遇到了麻烦
这是我的gridview
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1" Width="900px" BackColor="White" BorderColor="#999999"
BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical"
AllowSorting="True" OnSorting="Sort" OnRowCommand="GridView1_RowCommand"
DataKeyNames="Id" onrowcancelingedit="GridView1_RowCancelingEdit"
onrowdeleting="GridView1_RowDeleting" onrowupdated="GridView1_RowUpdated"
onrowupdating="GridView1_RowUpdating"
onselectedindexchanged="GridView1_SelectedIndexChanged">
<Columns>
<asp:TemplateField HeaderText="Fullname" SortExpression="Fullname" >
<EditItemTemplate>
<asp:TextBox ID="TextBox0" runat="server" Text='<%# Bind("Fullname") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:Button ID="AddPayment" runat="server" CommandName="Insert" Text="Add" ValidationGroup="add" />
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Fullname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" SortExpression="Date">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Date", "{0:dd.MM.yyyy}") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="newDate" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="newDate"
ErrorMessage="Enter date" ValidationGroup="add" Display="Dynamic">*</asp:RequiredFieldValidator>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Date", "{0:dd.MM.yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
下一部分
<asp:TemplateField HeaderText="Sum" SortExpression="Sum" ItemStyle-HorizontalAlign="Right">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Sum","{0:0.00} грн") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="newSum" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" runat="server" ControlToValidate="newSum"
ErrorMessage="Enter sum" ValidationGroup="add" Display="Dynamic">*</asp:RequiredFieldValidator>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Sum","{0:0.00} грн") %>'></asp:Label>
</ItemTemplate>
“&GT; “&GT; “&GT; “&GT; '/&gt; '/&gt;
和我的objectDatasourse
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="CostsReportControl.Payment"
DeleteMethod="DeletePayment" InsertMethod="InsertPayment" SelectMethod="GetPayments"
TypeName="CostsReportControl.Payments" UpdateMethod="UpdatePayment">
<SelectParameters>
<asp:Parameter Direction="input" Type="string" Name="sortExpression" />
<asp:Parameter Direction="input" Type="string" Name="sortDirection" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="userId" Type="Int32" />
<asp:Parameter Name="date" Type="DateTime" />
<asp:Parameter Name="fullname" Type="String" />
<asp:Parameter Name="paymentType" Type="String" />
<asp:Parameter Name="recordInfo" Type="String" />
<asp:Parameter Name="sum" Type="Double" />
</InsertParameters>
</asp:ObjectDataSource>
<asp:ValidationSummary ID="ValidationSummary3" runat="server" ValidationGroup="add"
ShowMessageBox="True" ShowSummary="False" />
我犯了这样的错误:
ObjectDataSource'ObjectDataSource1' 没有要插入的值。检查一下 'values'字典包含 值。
对不起我的大帖子) 需要帮助。
答案 0 :(得分:0)
GridView不支持开箱即用的插件(请参阅various上的articles internet)。这意味着插入参数的值不会自动填充。
解决方案包括使用ObjectDataSource的OnInserting
事件来填充insert参数的值。有关如何使用geekswithblogs.net
在同一site上,还有一个示例,说明如何使用 EmptyDataTemplate 插入值,以防GridView为空(第一条记录)。
否则,Codeproject会托管一个项目extends GridView with insert functionality - 即使您决定不使用它,也可以很好地阅读GridView。
答案 1 :(得分:0)
我遇到了这种模糊的错误,“检查'values'字典是否包含值。”我花了一段时间来弄明白这一点。我正在使用Linq-to-Entities并将我的objectdatasource连接的数据插入到我创建的类中以进行插入。当我收到此错误时,我专注于页面背后的代码,认为我的插入方法存在问题。在我使用objectdatasource的网格的InsertCommand中,我有这些代码行。
String applicationName = ((TextBox)((GridEditableItem)e.Item)["ApplicationName"].Controls[0]).Text;
dsSecurity.InsertParameters["ApplicationName"].DefaultValue = applicationName;
dsSecurity.Insert();
所有这些代码都只是从网格中的文本框中获取applicationName(我正在使用Telerik)并将其添加到objectdatasource(dsSecurity)的参数集合中,然后执行插入操作。对此没有任何说服力。那么问题是什么。
我的问题是数据库中有更多字段不能为空。除了applicationName之外,还有LoweredApplicationName和applicationId的guid。我无法将此数据发送到我从objectdatasource调用的方法中的数据库,并获得“无值插入”错误。
如果我再次收到此错误,我将向下游查看数据库插入所需的内容,并确保我发送所有需要插入的字段。希望这会有所帮助。