ASP.NET Настройка кнопки обновления в GridView - PullRequest
1 голос
/ 25 ноября 2011

Я использую C # ASP.NET на VS2005.

У меня есть таблица сетки, но у нее нет выбора для Включить редактирование , когда я щелкаю правой кнопкой мыши на Smart Tab .

Таким образом, я вручную добавил кнопку редактирования со следующим кодом:

AutoGenerateEditButton="True"

Кнопка редактирования успешно появилась в моем виде сетки так: enter image description here

Когда я нажимаю кнопку Редактировать , страница обновляется, и строка теперь редактируется: enter image description here

Однако, когда я нажал на кнопку обновления, меня привели к ошибке:

Updating is not supported by data source 'SqlDataSource1' unless UpdateCommand is specified.

enter image description here http://i.stack.imgur.com/W97K0.png

Я понятия не имею, как я могу ввести или настроить UpdateCommand, потому что я не вижу фонового кода для кнопки Update.

Нужна помощь опытных. Заранее спасибо.


Отредактировано: добавлен запрос INSERT в SqlDataSource1, однако я все еще сталкиваюсь с той же ошибкой, когда нажимаю кнопку Update.

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

Вам необходимо переконфигурировать элемент управления SqlDataSource1, в который можно добавить поддержку INSERT, DELETE, UPDATE вместе с SELECT.

Взгляните на этот учебник.

1 голос
/ 07 ноября 2012

при настройке sqldatasource при настройке оператора select для вида сетки, есть опция «расширенная». Нажмите на нее, а затем нажмите «создать обновление, вставить и удалить операторы».

0 голосов
/ 25 ноября 2011
In your code I think you have not handled the event for "Update".


Have a look at the below example hope it might help you,
check for the "UpdateCommand".
Also write a Update event in C# to update.



<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True"
    AutoGenerateRows="False" DataKeyNames="ProductID"
    DataSourceID="ManageProductsDataSource" EnableViewState="False">
    <Fields>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
            SortExpression="UnitPrice" />
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
            SortExpression="Discontinued" />
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    DeleteCommand=
        "DELETE FROM [Products] WHERE [ProductID] = @ProductID"
    InsertCommand=
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
         VALUES (@ProductName, @UnitPrice, @Discontinued)"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued]
         FROM [Products]"
    UpdateCommand=
        "UPDATE [Products] SET [ProductName] = @ProductName,
         [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued
         WHERE [ProductID] = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
        <asp:Parameter Name="ProductID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
    </InsertParameters>
</asp:SqlDataSource>
0 голосов
/ 25 ноября 2011

Например, попробуйте это ...

  1. Сначала создайте метод для обработки записи обновления.

    private void UpdateOrAddNewRecord(string parametervalue1, string parametervalue2)
        {
            using (openconn())
            {
                string sqlStatement = string.Empty;
                sqlStatement = "Update TableName set Name1 =@Name1 where Name2@Name2";
    
    
                try
                {
                //  SqlCommand cmd = new SqlCommand("storedprocedureName", con);
                  //cmd.CommandType = CommandType.StoredProcedure;
    
                    SqlCommand cmd = new SqlCommand(sqlStatement, con);
                    cmd.Parameters.AddWithValue("Name2", parametervalue2);
                    cmd.Parameters.AddWithValue("@Name1",parametervalue1);
    
                    cmd.CommandType = CommandType.Text;
                    cmd.ExecuteNonQuery();
    
                }
    
    
                catch (System.Data.SqlClient.SqlException ex)
                {
    
                    string msg = "Insert/Update Error:";
    
                    msg += ex.Message;
    
                    throw new Exception(msg);
    
    
                }
    
                finally
                {
    
                    closeconn();
    
                }
            }   
    
  2. Сейчассоздать метод обновления строки ..

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string ParameterValue1 = ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text;
    
            string ParameterValue2 = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text; //Name
    
            UpdateOrAddNewRecord(ParameterValue1, ParameterValue2); // call update method
    
            GridView1.EditIndex = -1;
            BindGridView();
            Label2.Visible = true;
            Label2.Text = "Row Updated";
        }
    
  3. Событие создания отмены строки ..

    protected void GridView1_RowCancelingEdit (отправитель объекта, GridViewCancelEditEventArgs e) {GridView1.EditIndex = -1;// вернемся в режим по умолчанию BindGridView ();}

  4. Создать редактирование строки ...

    защищенный void GridView1_RowEditing (отправитель объекта, GridViewEditEventArgs e) {GridView1.EditIndex = e.NewEditIndex;BindGridView ();}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...