Использование подробного просмотра без sqldatasource - PullRequest
0 голосов
/ 14 ноября 2009

У меня есть объект Detailsview, который загружается с пользовательскими данными, когда пользователь щелкает из сетки. Проблема в том, что я использую sqldatasource и предпочитаю использовать свой существующий пользовательский класс, который имеет все встроенные функции для этого. Я не смог сделать это правильно. Я не могу заполнить подробный вид пользовательскими данными без sqldatasource, и когда я пытаюсь вставить или обновить мои объекты, он проходит через код вставки / обновления, а затем завершается ошибкой, потому что у меня нет команды InsertCommand и т. Д. SQLDataSource .... нижняя строка ... может кто-нибудь помочь мне заставить это работать без необходимости SQLDataSource?

Вот мой код.

<asp:GridView runat="server" ID="gvUsers" DataKeyNames="UserID" BackColor="#eeeeee" Width="85%"
                        HorizontalAlign="Center"
                        Font-Bold="True" Font-Names="Verdana"
                        Font-Size="10pt" AutoGenerateColumns="False"
                        OnRowDataBound="GridView1_RowDataBound"
                        OnRowDeleting="GridView1_RowDeleting" >
                <HeaderStyle BackColor="Black" ForeColor="White"
                       Font-Bold="True" HorizontalAlign="Center" />
                <SelectedRowStyle BackColor="yellow" ForeColor="blue" />
                <AlternatingRowStyle BackColor="#ffffff" />
                       <Columns>
                             <asp:TemplateField>
                           <ItemTemplate>
                               <asp:LinkButton ID="LinkButton2"
                                 CommandArgument='<%# Eval("UserID") %>'
                                 CommandName="Select" runat="server">
                                 Select</asp:LinkButton>
                             </ItemTemplate>     
                             </asp:TemplateField>
                             <asp:BoundField DataField="UserID" Visible="false" />
                            <asp:BoundField DataField="FirstName" HeaderText="First Name" />
                            <asp:BoundField DataField="LastName" HeaderText="Last Name" />
                            <asp:TemplateField HeaderText="Delete?">
                             <ItemTemplate>
                               <asp:LinkButton ID="LinkButton1"
                                 CommandArgument='<%# Eval("UserID") %>'
                                 CommandName="Delete" runat="server">
                                 Delete</asp:LinkButton>
                             </ItemTemplate>
                           </asp:TemplateField>
                        </Columns>
                  </asp:GridView><br /><br />
                  <asp:DetailsView runat="server" ID="dvUser" DataSourceID="SqlDataSource3" AutoGenerateRows="False" Width="85%"
                        HorizontalAlign="Center" DataKeyNames="UserID">
                      <Fields>
                        <asp:BoundField DataField="UserID" Visible="false" />
                        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
                        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
                        <asp:BoundField DataField="UserName" HeaderText="User Name" />
                        <asp:BoundField DataField="Password" HeaderText="Password" />
                        <asp:BoundField DataField="Birthdate" HeaderText="Birthdate" />
                        <asp:BoundField DataField="Address" HeaderText="Address" />
                        <asp:BoundField DataField="Apt" HeaderText="Apt" />
                        <asp:BoundField DataField="City" HeaderText="City" />
                        <asp:BoundField DataField="Province" HeaderText="Province" />
                        <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" />
                        <asp:BoundField DataField="PhoneNum" HeaderText="PhoneNum" />
                        <asp:BoundField DataField="Email" HeaderText="Email" />
                        <asp:BoundField DataField="ynAdminUser" HeaderText="ynAdminUser" />
                        <asp:CommandField ShowDeleteButton="False" ShowEditButton="True" ShowInsertButton="True" />
                    </Fields>
                </asp:DetailsView>
                    <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ConnectionString%>" ID="SqlDataSource3"
                        runat="server" SelectCommand="sp_GetUser" SelectCommandType="StoredProcedure" OnInserting="OnInserting" >
                        <SelectParameters>
                            <asp:ControlParameter ControlID="gvUsers" Name="UserID" PropertyName="SelectedValue" Type="Int32" />
                        </SelectParameters>

</asp:SqlDataSource>

Не уверен, что CodeBehind необходим, я просто хочу использовать его для вызова кода моего объекта данных для обновления, вставки и т. Д.

1 Ответ

2 голосов
/ 14 ноября 2009

Почему бы не использовать ObjectDataSource . Этот элемент управления очень похож на SqlDataSource, но вместо указания SQL-запроса или хранимой процедуры вы указываете методы вашего пользовательского бизнес-объекта для доступа к данным.

<asp:ObjectDataSource ID="ObjectDataSource" Drunat="server" DeleteMethod="Delete" InsertMethod="Insert" SelectMethod="Select" UpdateMethod="Update" TypeName="YourType">

Вот пример, иллюстрирующий, как использовать ObjectDataSource с DetailsView.

...