2

I have a drop down menu which retrieve value from database,

<asp:DropDownList ID="DropDownList4" runat="server" 
   DataSourceID="SqlDataSource2" DataTextField="Plate" DataValueField="Plate" 
   Height="45px" Width="141px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
   ConnectionString="<%$ ConnectionStrings:Connection %>" 
   SelectCommand="SELECT [Plate] FROM [CarTab] WHERE ([Model] = @Model)">
      <SelectParameters>
          <asp:ControlParameter ControlID="DropDownList4" Name="Model" 
              PropertyName="SelectedValue" Type="String" />
      </SelectParameters>
</asp:SqlDataSource>

これにより、データベースからプレート番号が取得されます。管理者として、管理者はレンタルするユーザーに与えられるプレート番号を選択します。ここに質問があります。ユーザーに与えられた後にプレート番号を削除する方法は? たとえば、プレート A が選択され、管理者が SAVE ボタンを押した後、プレート A を再度選択することはできません。プレート A がリストから削除されます。手がかり、アイデア、提案を提供することで、私を助けてくれることを願っています。お返事をお待ちしております。ありがとう。

4

5 に答える 5

1

使用しているバックエンドデータベースの種類はわからないので、私のコメントはSQLServerに適用されます。

bit'IsSelected'という名前のCarTabテーブルにデータ型列を追加します。SQLSELECTをに変更しますSELECT [Plate] FROM [CarTab] WHERE ([Model] = @Model) AND IsSelected=00最初に、すべてのレコードに対して「IsSelected」フィールドをに設定します。プレートを選択したら、レコードの主キーを使用するようにIsSelectedフィールドを更新します。1次に、選択されていないレコードのみがに入力されますDropDownList

2人のユーザーがデータ入力画面をロードし、1人がプレートを選択した場合、このソリューションで同時実行の問題が発生する可能性があります。他のユーザーの画面は現在のものではありません。

于 2012-09-11T04:57:51.337 に答える
1

データベース内のフラグによって削除されたプレート番号をマークします。

データベース テーブルにビット フィールドを保持します。管理者がプレート番号を選択するときに 1 に設定します。

イベントで更新しますSelectedIndexChanged

<asp:DropDownList ID="DropDownList4" runat="server" 
   DataSourceID="SqlDataSource2" DataTextField="Plate" DataValueField="Plate" 
   Height="45px" Width="141px" OnSelectedIndexChanged="DropDownList4_SelectedIndexChanged" >
</asp:DropDownList>

protected void DropDownList4_SelectedIndexChanged"(object sender, EventArgs e)
{
    var connectionString = "your connection string from some configuration";
    var updateCmd = "UPDATE [CarTab] SET Rented = 1 WHERE ([Model] = @Model)";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(updateCmd , connection);
        command.AddWithValue("@Model", DropDownList4.SelectedValue);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

SelectCommandプレート番号がすでに貸し出されている場合は、where 句を使用してチェックします。

SELECT [Plate] FROM [CarTab] WHERE Rented = 0 and ([Model] = @Model)
于 2012-09-11T04:45:39.270 に答える
1

ボタンが押されたら、列を true にSave設定してプレートを削除済みとしてマークし、プレートflagfordeleteをロードするクエリを変更して、マークされたプレートを除外します。

于 2012-09-11T04:50:41.507 に答える
1

これは、あなたの質問と他の質問の間に類似点があるようです。1 人の管理者が予約を管理する場合、アプローチは異なります。それ以外の場合は、以下で説明する同様のアプローチを探す必要があります。

適応したい場合はアプローチする

またはを保存できる別の一時テーブルを作成することをお勧めしますドロップダウンからユーザーが車を選択したとき (アイテムの選択時にイベントを発生させることができます) CarIDCarCodesessionID

このイベントで carID と SessionID を一時テーブルに保存します

テーブル構造

 CarTempTable
    CarID xxx
    SessionID varchar(x)
    Date   datetime

このテーブルにCarIDとSessionIDがあると、次のようなクエリで他のユーザーのメインテーブルをクエリできます

SELECT CarID, CarName FROM Cars WHERE CarID NOT IN (SELECT CarID FROM CarTempTable WHERE SessionID <> "'+ SessionIDofUSER+'";

上記のアプローチでは、セッション終了時に特定のセッションの一時テーブル エントリをクリアする必要があります。

このアプローチはあなたのために働くはずです

編集: レンタカーの場合は、ユーザーが車を予約したかどうかに基づいて、車が利用可能かどうかを示す追加の列をテーブルに追加することをお勧めします。上記の一時テーブルでこれを使用できます。支払いまたはその他の方法で予約を行う方法がわからないためです

于 2012-09-11T04:55:06.267 に答える
1

ユーザーが [保存] ボタンを押すと、データベース内のプレートの可用性を再度確認する必要があります。選択したプレートが管理者から削除されている場合は、エンド ユーザーに適切なメッセージを表示できます。それ以外の場合は、コードを実行してレコードを保存します。あなたが私の主張を理解してくれることを願っています。

于 2012-09-11T04:55:46.687 に答える