需要帮助asp objectdatasource

时间:2010-06-19 17:14:30

标签: asp.net gridview objectdatasource

我有一个带有删除,插入方法的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'字典包含   值。

对不起我的大帖子) 需要帮助。

2 个答案:

答案 0 :(得分:0)

GridView不支持开箱即用的插件(请参阅various上的articles internet)。这意味着插入参数的值不会自动填充。

解决方案包括使用ObjectDataSource的OnInserting事件来填充insert参数的值。有关如何使用geekswithblogs.net

上的SqlDataSource执行此操作的完整示例

在同一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调用的方法中的数据库,并获得“无值插入”错误。

如果我再次收到此错误,我将向下游查看数据库插入所需的内容,并确保我发送所有需要插入的字段。希望这会有所帮助。