Нужна помощь с asp objectdatasource - PullRequest
0 голосов
/ 19 июня 2010

У меня есть класс Payment с методами delete, insert.

 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)

и у меня возникли проблемы с вызовом этого метода

это мой гридвью

<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>

«> «> «> «> '/> '/>

и мой объект DataSourse

<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' не имеет значений для вставки Проверь это словарь значений содержит значения.

простите за большой пост) Нужна помощь.

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

Я только что натолкнулся на такую ​​неопределенную ошибку: «Проверьте, что словарь« значений »содержит значения». и мне потребовалось время, чтобы понять это. Я использовал Linq-to-Entities и для вставки данных я подключил свой объектный источник данных к классу, который я создал для вставки. Когда я получил эту ошибку, я сосредоточился на коде страницы, думая, что в моем методе вставки была проблема. В моей команде InsertCommand для сетки, в которой использовался источник данных объекта, у меня были следующие строки кода.

String applicationName = ((TextBox)((GridEditableItem)e.Item)["ApplicationName"].Controls[0]).Text;
dsSecurity.InsertParameters["ApplicationName"].DefaultValue = applicationName;
dsSecurity.Insert();

Все, что делает этот код, - это просто получить applicationName из текстового поля в сетке (я использую Telerik) и добавить его в коллекцию параметров источника данных объекта (dsSecurity), а затем выполнить вставку. В этом нет ничего сложного. Так в чем же проблема.

Моя проблема заключалась в том, что в базе данных было больше полей, которые не могли быть нулевыми. В дополнение к applicationName, существует LoweredApplicationName и руководство для applicationId. Мне не удалось отправить эти данные в базу данных в методе, который я вызывал из objectdatasource, и получил ошибку «нет значений для вставки».

Если я снова получу эту ошибку, я посмотрю вниз по течению, что нужно для вставки базы данных, и проверю, отправляю ли я все поля, которые нужно вставить. Надеюсь, это поможет.

0 голосов
/ 20 июня 2010

GridView не поддерживает вставки из коробки (см. различные статьи в интернете ).Это означает, что значения параметров вставки не заполняются автоматически.

Решение состоит в использовании события OnInserting ObjectDataSource для заполнения значений параметров вставки.Есть полный пример того, как сделать это с SqlDataSource на geekswithblogs.net

На том же сайте , также есть пример того, как использовать EmptyDataTemplate для вставки значений в случае, если GridView пуст (первая запись).

В противном случае Codeproject содержит проект, который расширяет GridView с помощью функции вставки - это хорошее чтениео GridView, даже если вы решите не использовать его.

...