Как удалить данные из gridview, который использует источник данных и SP с помощью мастера - PullRequest
0 голосов
/ 02 марта 2010

Я использую gridview для выбора, удаления и обновления данных в базе данных. Я написал один SP для выполнения всех этих операций. На основании параметра SP решает, какую операцию выполнить.

Вот изображение моего gridview изображение моей сетки http://www.freeimagehosting.net/uploads/0a5de50661.jpg

         <asp:GridView ID="GridView1" runat="server" DataSourceID="dsDomain" 
            AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" 
            DataKeyNames="DomainId" >
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                <asp:BoundField DataField="DomainId" HeaderText="DomainId" 
                    InsertVisible="False" ReadOnly="True" SortExpression="DomainId">
                </asp:BoundField>
                <asp:BoundField DataField="Domain" HeaderText="Domain" 
                    SortExpression="Domain">
                </asp:BoundField>
                <asp:BoundField DataField="Description" HeaderText="Description" 
                    SortExpression="Description" >
                </asp:BoundField>                            
                <asp:BoundField DataField="InsertionDate" HeaderText="InsertionDate" 
                    SortExpression="InsertionDate">
                </asp:BoundField>                            
        </asp:GridView> 

Источник данных, который я использую, находится здесь

           <asp:SqlDataSource ID="dsDomain" runat="server" 
                ConnectionString="<%$ ConnectionStrings:conLogin %>" 
                SelectCommand="Tags.spOnlineTest_Domain" 
                SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"
                        DeleteCommand="Tags.spOnlineTest_Domain" DeleteCommandType="StoredProcedure" OnDeleting="DomainDeleting">

                <SelectParameters>

                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="DomainId" Type="String" />
                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Domain" Type="String" />
                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Description" Type="String" />
                    <asp:Parameter  DefaultValue="1" Name="OperationType" Type="Byte" />
                </SelectParameters>
                <DeleteParameters>
                     <asp:ControlParameter ControlID="GridView1" Name="DomainId" 
                        PropertyName="SelectedValue" Size="4" Type="Int32" />
                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Domain" Type="String" />
                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Description" Type="String" />
                    <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="4" Name="OperationType" Type="Byte" />
                </DeleteParameters>
             </asp:SqlDataSource>

Операция выбора работает нормально. Но когда я пытался удалить, он говорит

Процедура или функция spOnlineTest_Domain ожидает параметр «@Domain», который не был предоставлен
Но я поставляю этот параметр, как

Мой вызов хранимой процедуры выглядит так

EXEC Tags.spOnlineTest_Domain NULL, NULL, NULL, 1 // Для выбора последний параметр будет 1 EXEC Tags.spOnlineTest_Domain "SelectedRow's DomainId), NULL, NULL, 4 // Для удаления последний параметр будет 4

Моя процедура имеет 4 параметра, где последний параметр будет установлен программистом, который сообщит программе, какую операцию нужно выполнить. Для выбора только последний параметр должен быть не нулевым. Для Delete первый и последний параметр не может быть NULL.

Мой первый параметр Delete - это первичный ключ таблицы. Я передаю это значение, когда пользователь выбирает строку и нажимает удалить. Я не уверен, используя PropertyName = "SelectedValue", я получу правильное значение идентификатора.

http://www.freeimagehosting.net/uploads/0a5de50661.jpg />

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Если вы не реализовали событие OnDeleting объекта ObjectDataSource, попробуйте следующее

<asp:ObjectDataSource .... OnDeleting="YourDeletingEvent" ...
</asp:ObjectDataSource>

В вашем коде позади:

private void YourDeletingEvent(object source, ObjectDataSourceMethodEventArgs e)
{
  IDictionary paramsFromPage = e.InputParameters;

  //In this case I assume your stored procedure is taking a DomainId as a parameter
  paramsFromPage.Remove("Domain");
  paramsFromPage.Add("Domain", (int)paramsFromPage["DomainId"]);
  paramsFromPage.Remove("DomainId");
}

Пожалуйста, посмотрите здесь для более подробной информации.

1 голос
/ 14 июля 2011

вы можете написать: (между тегами gridView) \ \ asp: LinkButton ID = "linkButton1" runat = "server" CausesValidation = "false" CommandName = "Удалить" OnClientClick = "return verify ('Вы уверены, что хотите удалить эту запись?');" Текст = "Удалить" />

     </ItemTemplate>

     </asp:TemplateField>

и после того, как вы сможете реализовать метод "GridView1_RowDeleting", вот так: защищенный void GridView1_RowDeleting (отправитель объекта, GridViewDeleteEventArgs e) {

        //makeDelete("YourStoredProcedure");
        //mydataBindGV();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...