Обновите запись в одной таблице (gridview) и добавьте ее в другую таблицу - PullRequest
0 голосов
/ 28 мая 2019

Так что я имею в виду ... Допустим, у нас есть эта таблица с именем "Matched_table":

Date          Game   Client        cost
12-12-2001    Game1  Jonh          200
12-12-2003    Game2  Jonathan      100

Теперь у нас есть другая таблица с именем «NonMatched_table», эта таблица предназначена для записей, у которых нет записей, которые соответствуют «имени клиента», также эта таблица позволяет пользователю обновлять столбец имени клиента, чтобы сделать запись «» запись матча ":

   Date      Game      Costumer name     cost
12-05-2001   Game1       Empty           200 
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Carl           200   <--- Updated Record: 

После обновления это должно произойти:

---- "Таблица соответствия" ----

   Date          Game   Client        cost
   12-12-2001    Game1  Jonh          200
   12-12-2003    Game2  Jonathan      100
   12-05-2001    Game1  Carl          200

---- "NonMatched_table" ---

Date      Game        Costumer name     cost
12-05-2001   Game1       Empty           200 
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Empty           200

Не существует запроса, который делает это или что-то? Я делаю в C # этот запрос string query = "UPDATE NonMatched_table SET costumer= @costumer where ID = @Id Insert into Matched_table"; Мне интересно, если бы я мог сделать, как Insert into после или до и тоже удалить, чтобы стереть запись

1 Ответ

1 голос
/ 28 мая 2019

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

  • иметь все записи в одной таблице, например, MyTable со столбцами Date, Game,Client, Cost.
  • Просто используйте SELECT для фильтрации таблицы.Для несопоставленных записей запрос:

    SELECT * FROM MyTable WHERE Client IS NULL

    Для сопоставленных записей запрос:

    SELECT * FROM MyTable WHERE Client IS NOT NULL

  • В качестве альтернативы, вы можете использовать вышеупомянутые запросы для создания двух представлений MyTable, одного для сопоставленных и одного для несопоставленных записей.

Ваш возможный подход рано или поздно поднимает проблемы целостности данных,Я боюсь.

ОБНОВЛЕНИЕ

Просто для удовольствия вот рабочий пример того, что я предлагаю:

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:SqlDataSource 
                ID="SqlDataSourceUnmatched" 
                runat="server" 
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                SelectCommand="SELECT [Id], [Date], [Game], [Client], [Cost] FROM [MyTable] WHERE ([Client] IS NULL)"
                UpdateCommand="UPDATE [MyTable] SET [Date]=@Date, [Game]=@Game, [Client]=@Client, [Cost]=@Cost WHERE [Id]=@Id"
                OnUpdating="SqlDataSourceUnmatched_Updating">
                <UpdateParameters>
                    <asp:Parameter Name="Id" Type="Int32"/>
                    <asp:Parameter Name="Date" Type="DateTime" />
                    <asp:Parameter Name="Game" />
                    <asp:Parameter Name="Client" />
                    <asp:Parameter Name="Cost" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
            <br />
            <asp:GridView 
                ID="GridViewUnmatched" 
                runat="server" 
                AutoGenerateColumns="False" 
                DataSourceID="SqlDataSourceUnmatched"
                OnRowUpdated="GridViewUnmatched_RowUpdated">
                <Columns>
                    <asp:BoundField 
                        DataField="Id" 
                        HeaderText="Id"  />
                    <asp:BoundField 
                        DataField="Date" 
                        HeaderText="Date"  />
                    <asp:BoundField 
                        DataField="Game" 
                        HeaderText="Game" />
                    <asp:BoundField 
                        DataField="Client" 
                        HeaderText="Customer Name" />
                    <asp:BoundField 
                        DataField="Cost" 
                        HeaderText="Cost" />
                    <asp:CommandField 
                        ButtonType="Link" 
                        ShowEditButton="true"
                        ItemStyle-Width="100" />
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource 
                ID="SqlDataSourceMatched" 
                runat="server" 
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                SelectCommand="SELECT [Date], [Game], [Client], [Cost] FROM [MyTable] WHERE ([Client] IS NOT NULL)">
            </asp:SqlDataSource>
            <br />
            <asp:GridView 
                ID="GridViewMatched" 
                runat="server" 
                AutoGenerateColumns="False" 
                DataSourceID="SqlDataSourceMatched">
                <Columns>
                    <asp:BoundField 
                        DataField="Date" 
                        HeaderText="Date"/>
                    <asp:BoundField 
                        DataField="Game" 
                        HeaderText="Game" />
                    <asp:BoundField 
                        DataField="Client" 
                        HeaderText="Client" />
                    <asp:BoundField 
                        DataField="Cost" 
                        HeaderText="Cost" />
                </Columns>
                <EmptyDataTemplate>
                    No matched records.
                </EmptyDataTemplate>
            </asp:GridView>
        </div>
    </form>
</body>
</html>

Код позади

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void GridViewUnmatched_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        GridViewMatched.DataBind();
    }

    protected void SqlDataSourceUnmatched_Updating(object sender, SqlDataSourceCommandEventArgs e)
    {            
        // assert the record update
        e.Command.Parameters["@Date"].Value = DateTime.Now;
    }
}

Надеюсь, это поможет.Я использую Visual Studio 2017 и целевой платформой является .NET 4.6.1.

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